如何使用字符串(字符数组)初始化char
指针,而不是使用整数数组的int
指针?
当我尝试这个时
int* a={1,2,3,4,5};
它出错了
错误:标量对象'a'在初始值设定项中需要一个元素
但是,
char* name="mikhil"
完美无缺。
答案 0 :(得分:9)
因为这些是该语言的规则(标准)。没有什么可以告诉你可以用这样的数组初始化一个指针,例如,以下也是非法的:
char* name={'m', 'i', 'k', 'h', 'i', 'l', 0};
一个文字字符串得到它自己的处理,并没有被定义为一个字符数组。
答案 1 :(得分:7)
如果您尝试使用
初始化int *
{1,2,3,4,5};
这是错误的,因为{1,2,3,4,5};
,as-is,不是整数数组。它是一个括号括起来的初始化列表。这可用于初始化int
数组(数组的各个元素,具体而言),但不能用于指针。 数组不是指针,反之亦然。
但是,您可以使用compound literal来初始化int *
,例如
int * a = (int []){1,2,3,4,5};
答案 2 :(得分:2)
为方便起见,该语言允许使用字符串初始化char *(或者,最好是const char *)。这是因为它是一种非常常见的用法,从C开始就是可能的。你不应该真正修改字符串值(当然,这是一个单独的辩论)。
使用int,如果初始化int a [5],则可能会更改值。初始化的值将被复制到您的数组中(编译器优化不能承受),您可以根据需要更改它们。如果允许int * a以这种方式初始化,它会指向什么?它不是很清楚,所以标准不允许它。
答案 3 :(得分:1)
该语言不支持null终结符到int数组,这是因为编译器会产生歧义,即null终止符或int数组中的0 ...
这是同样的原因
cout<<anystring;
给出完整的字符数组,即完整的字符串
这不是
cout<<a;
对于1-d int数组a ... infact它会给出错误信息并且不打印完整的1-d数组......
upvote如果我满意/解决了你的问题......