gpt4 book ai didi

c++ - char数组声明中字符串文字周围的大括号有效吗? (例如 char s[] = {"Hello World"})

转载 作者:IT老高 更新时间:2023-10-28 14:00:30 26 4
gpt4 key购买 nike

我偶然发现 char s[] = {"Hello World"}; 行已正确编译,并且似乎与 char s[] = "Hello世界”;。第一个 ({"Hello World"}) 不是一个包含一个元素的数组,它是一个 char 数组,所以 s 的声明应该是 char *s[]?事实上,如果我将其更改为 char *s[] = {"Hello World"}; 编译器也会像预期的那样接受它。

寻找答案,我发现唯一提到这个的地方是this one但没有引用标准。

所以我的问题是,为什么行 char s[] = {"Hello World"}; 编译虽然左侧是 array of char 类型和右边的类型是 array of char?

以下是一个工作程序:

#include<stdio.h>
int main() {
char s[] = {"Hello World"};
printf("%s", s); // Same output if line above is char s[] = "Hello World";
return 0;
}

感谢您的澄清。

附:我的编译器是 gcc-4.3.4。

最佳答案

这是允许的,因为标准是这样说的:C99 第 6.7.8 节,第 14 节:

An array of character type may be initialized by a character string literal, optionally enclosed in braces. Successive characters of the character string literal (including the terminating null character if there is room or if the array is of unknown size) initialize the elements of the array.

这意味着两者都

char s[] = { "Hello World" };

char s[] = "Hello World";

只不过是语法糖

char s[] = { 'H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd', 0 };

在相关说明(同一节,§11)中,C 还允许在标量初始化器周围使用大括号,例如

int foo = { 42 };

顺便说一句,它非常适合复合文字的语法

(int){ 42 }

关于c++ - char数组声明中字符串文字周围的大括号有效吗? (例如 char s[] = {"Hello World"}),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10147264/

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