我有这个小程序:
#import <stdio.h>
#import <stdlib.h>
void main(void) {
char a;
char b;
printf("Adress a: %p\n", (void *)&a);
printf("Adress b: %p\n", (void *)&b);
return 0;
}
b的地址低于b的地址。为什么会这样?或者我做错了什么?
答案 0 :(得分:4)
局部变量的存储空间位于堆栈中。 X86处理器系列有一个“向下增长”的堆栈。这意味着当分配发生时(例如分配变量),堆栈指针向下移向较低的内存地址。
&a
大于&b
,因为在分配&a
后,堆栈指针向下移动到较低的地址以进行下一次分配。
答案 1 :(得分:2)
在你的情况下,堆栈会逐渐减少。
a
和b
按照定义的顺序分配在堆栈上。因此,您&a
高于&b
。