在阅读这个问题时,我想测试GCC中的输入,看看会输出什么错误。 令我惊讶的是以下一行:
char array[] = {"s"};
编译时没有错误或警告,导致大小为2的数组包含"s "
。 我原本期望编译器错误,因为表达式的右侧是char*[]
类型。
在这种情况下,数组初始化只有一个元素不被视为数组,为什么?
char array[] = {"s"};
与:
char array[] = "s";
这里{ }
是可选的,因为“s”是字符串文字。
要么,
char array[] = {'s', ' '};
在这种情况下, { }
是初始化数组所必需的。
正确初始化的字符串是:
char array[] = "something";
它是一个10字符arrays。
但如果你写:
`char* array = "something";`
`它是一个不同的对象,你将无法修改数组的内容。
并且:
char* array[]
不是一个字符串。
它是一个char指针数组(char *)。 你需要为每个char分配内存*
exp:
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,无法修改字符串。
对于那些说我写的东西完全错误的人,你知道char *需要内存分配吗?
为什么-6或更多?
需要了解更多c/c++开发分享在C中,数组初始化只有一个元素专门处理?,也可以关注C/ C++技术分享栏目—计算机技术网(www.ctvol.com)!
以上就是c/c++开发分享在C中,数组初始化只有一个元素专门处理?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/978915.html