gpt4 book ai didi

arrays - 为什么在初始化指针时必须将数组转换为 type[]?

转载 作者:行者123 更新时间:2023-12-05 08:49:11 25 4
gpt4 key购买 nike

我们在初始化指针时不转换字符串:

char *string = "Hello World!";

但是,如果我尝试显式定义一个数组(无论它属于什么),编译器都会给我一个类型不兼容的警告:

char *string = {'H', 'e', 'l', 'l', 'o', '\0'};

转换为 char[] 可行,但我想知道为什么我们必须转换?编译器看不到初始化值 {'H', 'e', 'l', 'l', 'o', '\0'} 已经是一个数组了吗?如果我们以相同的方式初始化像 string[] 这样的数组,我们就不必强制转换。我在这里假设编译器看到初始化值是什么,为什么在初始化指针时看不到它?

最佳答案

string 是一个指针,不是一个数组,所以它需要一个作为指针的初始化器。

第一个代码片段没问题,因为字符串文字具有数组类型,并且该数组会衰减为指向其第一个元素的指针。

第二个不行,因为您要将一组字符分配给指针。因为 string 不是数组或结构,所以只使用初始化列表的第一个成员。因此,您有一个字符常量,其类型为 int,您正试图将其分配给一个指针。

你说如果你转换它会起作用。如果你是这个意思:

char *string = (char []){'H', 'e', 'l', 'l', 'o', '\0'};

然后你得到的实际上是右侧的复合文字,它具有数组类型,并且像第一个示例一样,数组衰减为指向其第一个成员的指针。

关于arrays - 为什么在初始化指针时必须将数组转换为 type[]?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64361788/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com