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

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

当我试着这个

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

它给出了一个错误说法

错误:标量对象’a’在初始化程序中需要一个元素

但,

 char* name="mikhil" 

工作得很好。

如果你正在尝试初始化int *

  {1,2,3,4,5}; 

这是错误的,因为{1,2,3,4,5}; ,as-is,不是整数数组 。 它是一个括号括起来的初始化列表。 这可用于初始化int数组(数组的各个元素,具体而言),但不能用于指针。 数组不是指针,反之亦然。

但是,您可以使用复合文字来初始化int * ,例如

 int * a = (int []){1,2,3,4,5}; 

因为这些是语言的规则(标准)。 没有什么可以告诉你可以用这样的数组初始化一个指针,例如,以下也是非法的:

 char* name={'m', 'i', 'k', 'h', 'i', 'l', 0}; 

文字字符串有自己的处理方式,并没有像字符数组那样定义。

为方便起见,该语言允许使用字符串初始化char *(或者,最好是const char *)。 这是因为它是一种非常常见的用法,从C开始就是可能的。你不应该真正修改字符串值(当然,这是一个单独的争论)。

使用int,如果初始化int a [5],则可能会更改值。 初始化的值将被复制到您的数组中(编译器优化不能承受),您可以按照您认为合适的方式更改它们。 如果允许int * a以这种方式初始化,它会指向什么? 它不是很清楚,所以标准不允许它。

该语言不支持null终止符到int数组,这是因为编译器会产生歧义,即null终结符或int数组中的0 …

这是同样的原因

cout< 给出完整的字符数组,即完整的字符串,这不

cout< 对于1-d int数组a ...事实上它给出了一条错误信息,并且不打印完整的1-d数组......

如果我在某个地方满意/解决了你的查询,那就upvote ...