转引自:http://www.wangchao.net.cn/bbsdetail_837875.html
字符指针和字符数组
char* s1="hello";char s2[]="world";
两个表达式的含义基本上是一样的。
如果讲不同之处的话,那就是VC中编译时,对这两种定义进行了不同的处理;
char *s1 = "hello"; 中的"hello"在编译时指针指向的区域位于PE文件的.rdata节(全局常量)中,是只读的。
而 char s2[]="world"; 中的"world"在编译时指针指向的区域位于PE文件的.data节(已初始化的全局变量)中,是可读写的。
int main()
{
char *s1="hello";
char s2[]="world";
*(s2+2)='x'; //正确,因为(s2+2)指向可读写的.data节
*(s1+2)='x'; //执行时出错,因为 (s1+2)指向只读的.rdata节
return 0;
}