回复 楼主 大大猫
要弄清楚这个问题,你首先需要清楚变量空间和变量名,最好是看看C的编译器。
就拿局部变量举例:
如:int a = 0;
空间在堆栈区,a这个字符串在代码区作为一个符号存在,此符号映射地址在堆栈区。
而int *a = 0, *b = 0;
在堆栈区申请一块空间,此空间用来存放符号a指向的地址,而“a”本身还是在代码区作为一个符号存在,此符号映射在堆栈区特定空间。
当操作a = b时,
由于C语言对指针作了编译,在此,可以将b指向的地址值放入a在堆栈区的空间。
char a[]="hello";
或者char a[5] = {0};
“a”仅仅作为代码区的一个符号存在,直接映射到堆栈区(或者常量区)的数组地址上。
在C语言编译器中,对除了指针以为的其他变量,都是直接映射到最终空间,不允许对其地址赋值,否则,会造成变量空间泄漏。
这个问题要结合编译器看,另外,数组和指针根本是两个不同的范畴。
在使用过程中,指针可以指向所有的地址,而不仅仅是数组的地址。
有不清楚的地方,讨论。
[
本帖最后由 silent_world 于 2011-10-10 18:24 编辑 ]