







一、a与b类型不同:a为指向字符串的指针;b为保存字符串的数组。
char *a = "hello" 是个字符串常量指针;
char b[] = "hello" 是个赋初值的字符数组。
二、"hello"和"world"字符串保存的位置不同。"world"保存在堆栈
中,其中的只可以修改(b[3] = 'F';);"hello"保存在全局数据
区,位置是在.rodata中,不能修改(a[3] = 'A';错误)。
三、由上面第二条知:a是全局数据区,b是函数的栈空间区域,函数
执行完成,这个空间可就没了。所以,return a;是可以的而
return b;就很危险了。
四、只有2中情况下,数组名不可等同视为数组指针,&与sizeof操作符
“&”的区别:
&a取得是指针变量的地址,而非字符串"world"的首地址;&b取得
就是字符串"hello"的首地址。
“siziof”的区别:
下面假设在ia32平台上运行,保存变量的内存空间不同。
sizeof(s1); // return 4, pointer size
sizeof(s2); // return 6, array size
例子:








下面是GDB调试的结果:
























