在C语言中,是否只对一个元素的数组初始化进行了特殊处理?
在阅读时,我想测试GCC中的输入,看看会输出什么错误。令我惊讶的是,下面这句话:在C语言中,是否只对一个元素的数组初始化进行了特殊处理?,c,arrays,C,Arrays,在阅读时,我想测试GCC中的输入,看看会输出什么错误。令我惊讶的是,下面这句话: char array[] = {"s"}; 编译时不会出现错误或警告,从而生成一个大小为2的数组,其中包含“s\0”。我本以为会出现编译器错误,因为表达式右侧的类型为char*[] 在这种情况下,只有一个元素的数组初始化是否不被视为数组,为什么 char array[] = {"s"}; 同: char array[] = "s"; 在这种情况下,{}是可选的,因为“s”是字符串文字 或者 在这种情况下,{}
char array[] = {"s"};
编译时不会出现错误或警告,从而生成一个大小为2的数组,其中包含“s\0”
。我本以为会出现编译器错误,因为表达式右侧的类型为char*[]
在这种情况下,只有一个元素的数组初始化是否不被视为数组,为什么
char array[] = {"s"};
同:
char array[] = "s";
在这种情况下,{}
是可选的,因为“s”是字符串文字
或者
在这种情况下,
{}
是初始化数组所必需的。正确初始化的字符串是:
char array[] = "something";
这是一个10字符的数组
但如果你写:
`char* array = "something";`
`它是另一个对象,您将无法修改数组的内容
以及:
char* array[]
不是字符串
它是一个字符指针数组(char*)。您需要为每个字符分配内存*
经验:
char* array[3];
array[0] = malloc (10*sizeof(char));
strcpy(array[0] , "hello");
但是,要拥有char*数组,您不能直接执行以下操作:
char* array[3];
array[0] = "hello";
都不是:
char* array[] = {"first","second","other one","last"};
使用此init,无法修改字符串
对于那些说我写的完全错误的人来说,你知道一个字符*需要一个内存分配吗
那么为什么使用-6或更多?特别是在C中,您可以使用{}初始化标量。。。然而,我不知道这是否对对齐有任何影响。不。。对对齐没有影响:)正常。所以我不得不考虑这个情况下的全部表达,而不仅仅是左侧。code>{“s”}肯定与
“s”
不同,例如字符数组*[]={“s”}代码>有效,但字符数组*[]=“s”
不是。@Antoine:当你说,char array*[]
你在声明一个指针数组时,在这种情况下,你必须提供一个初始值设定项列表。好的,这就回答了我评论中的问题:初始化表达式右侧的含义取决于左侧的类型,听起来很奇怪。@cpx:char-array*[]
不是合法声明。
char* array[] = {"first","second","other one","last"};