如何使用字符串(字符数组)初始化字符指针,但是不使用整数数组的int指针?

时间:2016-03-12 06:22:32

标签: c++ c arrays string pointers

如何使用字符串(字符数组)初始化char指针,而不是使用整数数组的int指针?

当我尝试这个时

int* a={1,2,3,4,5};

它出错了

  

错误:标量对象'a'在初始值设定项中需要一个元素

但是,

char* name="mikhil"

完美无缺。

4 个答案:

答案 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如果我满意/解决了你的问题......