char str[10];str="string";(不正确的赋值)为什么? 小弟在数组和指针上犯糊涂了。求详详细细解解。。。

还是,
char s[5]=” string” ;等价于char *s;*s=” string”;
char s[5]=” string” ; 等价于char *s; s=” string”;
char str[10]={” string”} ; 等价于char str[10]; *str[10]={” string”};
为什么也不对啊。

1、您必须明白char str[10];是定义了一个含有十个元素的数组,而且这十个元素在内存中是以连续的存储单元存放的。其中str是该数组的数组名字,而且str还是该数组的首地址,也就是十个元素中的第一个元素的地址,但务必注意str是一个指针常量,它是不能被赋值的也不能进行自增自减的!例如:假设你在函数中声明一个char str[10];操作系统为其分配一个连续的10个存储单元,假设其首地址是1024,那么str的不仅代表着数组的名字而且它的值是1024,是一个常量不能被改变。

2、您指出char str[10];str="string";是错误的,因为前面已经指出str只是一个地址,不是变量是不能被赋值的。

3、char *s;是定义的一个指针变量,它指向一个字符型数据,它是可以被赋值的。指针变量和普通变量是一个道理的,不同的只是指针变量存放的是地址,而普通变量存放的是数值或字符等。*s代表的是指针所指向的数据,您用*s="string";是错误的,因为*s和其他变量一样只能存放一个一个字符,而"string"中包含7个字符分别为s,t,r,i,n,g,\0;切勿把*s="string"与s="string"混同,后者是可以的,因为s是一个指针s="string"是把该字符串的首地址赋值给了s而不是把string的每个地址都给了s,前面已经指出字符串"string" 是存放在连续的存储单元的,所以可以通过s的递增来实现对每个元素的访问。

4、一维数组的初始化应该是如果元素为整数可用char str[10]={5,4,3,2,1};如果是字符则用char str[10]="string";

最后我帮你指出您的式子错误的地方,您在结合书本好好理解一下,因为不能画图所以我说的可能繁杂了点!

【一】char s[5]="string";(数组s仅有5个存储空间是不能存放7个元素的)
等价于char *s;*s="string";(*s仅能代表一个元素,是不能赋值给它整个数组的)
【二】char s[5]="string";(错误同上 )
等价于char *s; s="string";(这个式子是对的)
【三】char str[10]={"string"} ;(字符数组初始化是不能用这样的方式的如果是整数则可以,例如:int str[10]={1,2,3,4,5})
等价于char str[10]; *str[10]={"string"};(*str[10]是错误的,它本身就不是个指针所以不能用“*”该符号!str[10]只是代表字符数组的第十个元素,所以不能将怎个字符串赋值给他)

正确的式子
char s[10]="string"等价于char *s;s="string";

指针是C语言的难点也是奥秘所在,掌握了指针C语言也不在神秘,推荐你看一本书《c和指针》人民邮电出版社,希望我的回答能帮助到您!
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-12-03
str是个数组,当你在程序中写str时,就是表示str[0]的地址也就是&str[0],这就是为什么char *p 可以=str的原因。所以str="string";就相当于&str[0] = "string",当然会出错,一个是地址,还是单个字符,另一个是个字符串。在定义变量的时候char s[6]=” string” 是合法的。注意长度!
在*str[10]={” string”};中,str[10]不是指针,你给他加了一个*是错误的,而且他表示的是数组的第11个字符,就一个字符的长度怎么能赋"string"呢。
建议你多看书吧,《c++ primer》(第三版)很好。本回答被网友采纳
第2个回答  2010-12-03
char str[10] = "string";这样写可以。但分开不行。
因为char str[10]已经为str分配空间了,而且str的地址不能被改变。
而str="string"表示为str指向“string”所在内存地址,也就改变了str的地址,因此是错误的。
而char str[10] = "string";表明为str分配10个字节的空间,且用“string”初始化str。
数组所指的地址是不能被改变的。
第3个回答  2010-12-04
char str[10]; //系统为str数组分配了空间,str现在是一个常量了
str=” string”; //将堆栈中"string”的地址赋值给str,相当于5 = 3;

你可以用strcpy(str, "string");来实现上述的赋值。
第4个回答  2010-12-03
//下面这行长度不够啊!
char s[7]="string" ;等价于char *s;*s="string";

char str[10]="string" ; 等价于char str[10]={'s','t','r','i','n','g','\0'};
相似回答