看到你9楼的回复我很吃惊,还真的以为自己错了,然后我用Dev 和VC 都试了一下,没有你所说的以上结果。
在跟你说一下, char * str = "assssss";
str[0] = 'b'; // 这是不可以的。
原因如下:str 是一个指针,也就是说 str 是一个地址,在这个地址下存放着字符串 "assssss" 这个字符串的值是不允许被修改的。因为它是常量。
来比较 char str[20] = "assssss"; str[0] = 'b'; // 这个是被许可的。
当你建立这个字符数组的时候,你就为他开辟了內存空间, 并通过赋值的方式将字符串"assssss" 放入那个你说开辟的內存空间.
str[0] = 'b'; 当这条语句执行时,你操作的是这个字符数组,而并非那个字符常量。他们两者的地址是不一样的。
如果你想看他们两者的存放地址,可以通过如下语句:
#include <stdio.h> int main() { char * p_str = "assssss"; char * p_c = "assssss";
printf("The address of constant string:\n"); printf("%d\n", &"assssss"); // decimal printf("%0x\n",p_c); // hexidecimal
char str[20] = "assssss"; printf("The address of the char array:\n"); printf("%d\n", str); printf("%0x\n", str);
printf("Now you will find they are not same.");
return 0; }