用字符串初始化char型数组和字符指针的问题

用字符串初始化char型数组和字符指针的问题
char a[8];
a="Helloo";

error C2440: “=”: 无法从“const char [6]”转换为“char [8]”
为什么必须在定义的时候初始化呢...我是小白,望高手答疑解惑~
哥哥来回答。

char a[8];这样定义了一个数组后,数组名a就是个地址常量,也就是指针常量,毕虚只能指向该数组在内存地址空间中的首地址。不可以指向别的地址。
所以如果a = "hello";就是把字符串常量"hello"的首地址赋给地址常量a,这是不手迹燃允许的。

而如果写成char a[8] = "hello";这就是在定义数组a的州知时候就对其初始化,把"hello"串的每个字符赋值给数组a的元素。这是合理的。

并不是非得必须在定义的时候初始化,也可以定义之后再初始化,
比如:
char a[8];int i = 0;
for (i = 0; i < 8; i++)
{
a[i] = i;
}
楼主,你可以这样定义:
char a[8]={"Hello"};
这样就定义了一个字符串,需要说明,你的定义是错的,如果你想这样定义应该这样:
char *p="Hello";
输出时应该这样:
printf("%s",p);
例子说完了,我来搭旁讲讲知碧橡实质吧,字符串定义的名字代慧槐表的是这个字符串的首地址,如a[8],a就是这个字符串的首地址,就是指针,说到这里,第二种写法我想楼主就明白了吧,第二种也是定义一个指针,而指针指向的就是字符串"Hello"的首地址,补充一下,系统会移动移动字符串指针,知道遇上'\0'这就是输出为什么可以printf("%s",a);输出的原因…
定义信拍册的时候初始化,是把“Helloo"按照字符滑宏依次装入数组a中

而a="Helloo";
是把="Helloo"字符串的地址贺败赋值给a,而a是个常量不能赋值的
← 上一篇: 下一篇: →