5

我有这个小程序:

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

4

2 回答 2

4

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

&a大于,&b因为 after&a被分配,堆栈指针被向下移动到下一次分配的较低地址。

于 2013-04-25T07:36:00.477 回答
2

在你的情况下,堆栈会增长。

a并按b定义顺序分配在堆栈上。所以你有&a高于&b

于 2013-04-25T07:29:16.147 回答