2 tangzhence tangzhence 于 2014.11.24 17:37 提问

c语言中字符数组初始化问题

字符数组初始化
1:
char str[]="123";//不报错
2:
char str[4];
str="123";//不能将const char[4] to char[4]
字符指针初始化
1:
char *str="123";//不报错
2:
char *str;
str="123";//不报错
求大神解释这是为什么

5个回答

huanghui167
huanghui167   2014.11.26 11:12
已采纳

我来解释一下:
数组初始化
1、char str[]="123";//不报错
原因是,这样的写法,实际上str是一个指针变量,str指向了“123”数据段。
等效于char *str="123";
char *str;
str="123";
这个很好理解了,对一个指针变量赋“123”数据段的首地址。
2、char str[4];
str="123";//不能将const char[4] to char[4]字符指针初始化
这个是错误的,表面上的意义是str是一个数组,str变量则是这个数组的首地址,等效于&str[0],因此这样赋值是非法的。

qqlindexi
qqlindexi   2014.11.24 17:51

123是内存里而char *str是指针,指向。char str[]=?是初始化,这样编译 for(i=0;i<string.length;i++)str[i]=string[i]
char str[4],str已经固定不能变,他是const,str是const不能指向别char char *str是指针可以到内存123

caozhy
caozhy   Ds   Rxr 2014.11.24 17:51

你知道123正好是4个字符,能装在str[4]中,编译器并不知道这一点。它统统不让定义了长度的数组接受一个字符串。

91program
91program   Ds   Rxr 2014.11.24 18:03

char str[4];
str="123";//不能将const char[4] to char[4] 是因为 str 被认为是常量型指针,所以不能修改它。
字符指针初始化

huanghui167
huanghui167   2014.11.26 11:02

不太明白你的问题,这些操作都没问题啊

Csdn user default icon
上传中...
上传图片
插入图片