字符串字面量初始化数组的歧义?

发布时间 2023-12-28 10:11:34作者: 自由小菜园

char arr[]={'h','e','l','l','o','\0'} 声明初始化一个字符数组。

为了方便书写,我们也可以写成语法糖形式

char arr={"hello"} 或者 char []arr="hello"

"hello"是一个char []数组类型,C语言规定:数组类型对象用作表达式会转换为首元素指针

所以我们发现上面两个初始化数组方式,并没有转换为指针,否则就会出现类型不一致。

因为C语言又规定了:如果字符串字面量用于初始化数组,则不会发生到指针的转换。

不过看下面const char* arr[]={"hello"} 这个也算是用字符串字面量初始化数组吧,这里显然发生了到指针的转换。

所以由此我们断定:规范中的用于数组初始化的字符串字面量 不会发生隐适转换,特指初始化char[] 这种数组