[英]What is the difference between time complexity of string and char array declarations in c++?
[英]C string and char array declarations
鉴于这些是允许的:
char c[] = "abc";
char c[] = {'a','b','c','\0'}
char *c = "abc";
那为什么不允许这样做?
char *c = {'a','b','c','\0'}; // error: a char cannot initialize a char*
如果编译器将字符串文字解释为以null终止的char数组,那么我会认为它等同于上面的语句3,不是吗?
同样,为什么不允许这样做:
int arr[3];
int *i = arr; // OK
int *i = {1,2,3} // error: an int cannot initialize an int*
这不是一个大问题,我很好奇。我想这个问题归结为一个字符串常量(或声明的整数数组)和一个字符元素数组在分配给指针时的区别是什么?
数组不是指针。 用字符串文字初始化字符数组是一种特殊情况(6.7.8#14):
字符类型的数组可以由字符串文字初始化,并可选地用大括号括起来。 字符串文字的连续字符(如果有空间或数组大小未知,则包括终止空字符)将初始化数组的元素。
并且(6.7.8#16):
否则,具有聚合或联合类型的对象的初始化程序应为括号内的元素或命名成员的初始化程序列表。
关于指针初始化(6.7.8#11):
标量的初始化程序应为单个表达式,可以选择用大括号括起来。 对象的初始值是表达式的初始值(转换后); 采用与简单赋值相同的类型约束和转换,将标量的类型作为其声明类型的非限定版本。
数组不是指针。 只是数组名称是指向第一个数组项的指针。
您在这里要问的是在C / C ++中初始化数组的不同方法。 请注意:
字符串文字是section DATA
中未命名数据的特例。 使用数组时,您应该手动分配堆上的空间,然后将数据移到那里。 (因为不能分配数组,所以是一对一的。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.