C中的局部变量地址

时间:2013-04-25 07:26:06

标签: c memory-management

我有这个小程序:

#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的地址。为什么会这样?或者我做错了什么?

2 个答案:

答案 0 :(得分:4)

局部变量的存储空间位于堆栈中。 X86处理器系列有一个“向下增长”的堆栈。这意味着当分配发生时(例如分配变量),堆栈指针向下移向较低的内存地址。

&a大于&b,因为在分配&a后,堆栈指针向下移动到较低的地址以进行下一次分配。

答案 1 :(得分:2)

在你的情况下,堆栈会逐渐减少。

ab按照定义的顺序分配在堆栈上。因此,您&a高于&b