#include <stdio.h>
#include <stdlib.h>
int main()
{
char *a="abcdefg";
*(a+3)='n';
printf("%c",*(a+3));
system("pause");
return 0;
}
</pre><p>运行这个程序会报错</p><p>而运行下面一个程序</p><pre class="plain" name="code">#include <stdio.h>
#include <stdlib.h>
int main()
{
char a[]="abcdefg";
*(a+3)='n';
printf("%c",*(a+3));
system("pause");
return 0;
}
则输出为n,运行正常
#include <stdio.h>
#include <stdlib.h>
int main()
{
char a[]="abcdefg";
*(a+3)='n';
printf("%s",a);//没什么区别只是按,字符串输出,输出为abcnefg,体现了a,与*(a+n)的区别
system("pause");
return 0;
}
上面的例子的原因是什么?
注意char *a="abcdef"与char a[]="abcdef"的区别:1、字符串存放的内存区域不同:前者存放在常量区,不可修改,后则存放在栈中,可以修改;2、变量a存放的内容不同:前者存放的是一个地址,而后者存放的是字符串"abcdef",因此使用sizeof它们的结果是不同的,分别是4和7