C语言中的字符串指针

char s[]="AAA";
printf("%s",s);
s[0]='B';
printf("%s",s);
如果是第一行是char *s="AAA";就不行,为什么?

*s代表的是字符串指针,而字符数组名本身就是一个指针

用二维数组。这样就可以了


温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-11-24
因为char * s = “AAA“ s指向的是字符串常量,所以不能改
用数组的话,s[] = "AAA" ,s就是字符数组, 字符数组内容是可以改的追问

char* s;
char p[]="nihao";
s=p;
printf("%s",s);
*s='N';
printf("%s",s);
这样也行,就是间接的改变了数组的值。你的意思,char * s="AAA"相当于 const char *s=“AAA”?

追答

是的,用" "的字符串都是常量,不可以更改,虽然你用char * s 指向了字符串的首地址,但是只能读取里面的值,不能改的,用数组的话,char p[] =“ andnf" 是用这个字符串初始化数组,数组的首地址和字符串常量的首地址是不一样的。他们所在的内存空间不是一个

本回答被提问者采纳
第2个回答  2013-11-24
char s[]="AAA";

char *p=&s;
相似回答