在C中,数组初始化只有一个特殊处理的元素?

Ant*_*ine 8 c arrays

在阅读这个问题时,我想测试GCC中的输入,看看会输出什么错误.令我惊讶的是以下一行:

char array[] = {"s"};
Run Code Online (Sandbox Code Playgroud)

编译时没有错误或警告,导致包含大小为2的数组"s\0".我原本期望编译器错误,因为表达式的右侧是类型char*[].

在这种情况下,数组初始化只有一个元素不被视为数组,为什么?

cpx*_*cpx 6

char array[] = {"s"};
Run Code Online (Sandbox Code Playgroud)

与:

char array[] = "s";
Run Code Online (Sandbox Code Playgroud)

{ }在这种情况下,这是可选的,因为"s"是字符串文字.

要么,

char array[] = {'s', '\0'};
Run Code Online (Sandbox Code Playgroud)

在这种情况下,{ }需要初始化数组.

  • 特别是在C中,您可以使用{}实际初始化标量...但我想知道它是否对对齐有任何影响.没有..对齐没有影响:) (4认同)