【发布时间】:2014-10-23 10:02:06
【问题描述】:
假设我们声明并初始化了一个全局变量:
short var = 3900;
并分别存储在堆栈中:
...[][][][][][][][15][60][][][]... (60 + (15*256) = 3900)
那么新的变量指针将如何/在哪里存储?
int p = &var;
地址是否像普通整数一样存储?持续的?依赖类型? (如果指针是char类型并且指向的值是int,gcc不会报错。它怎么会在1个字节中分配大量数字?优化?
编辑:哦,我明白了。 考虑一下:
int num = 5;
char* p = #
p是指针,指针是比较多的字节,可以表示这么大的地址。 除此之外.. *p 是 char 并且不能表示比 256 更大的数字。5 很好。
【问题讨论】:
-
是的,地址的存储方式与 int 完全相同(在普通的 32 位系统上)。是的,变量的地址在程序存在的整个过程中都是不变的。
-
它像其他原始类型一样存储。
-
它依赖于类型吗?正如我在沿 gcc 的 C::B 中看到的那样。如果指针是
char类型并且指向的值是int,它不会返回任何问题 -
注意:作为地址的指针不一定总是可以作为 int 保存
-
@BLUEPIXY 你是什么意思?
标签: c pointers memory memory-management