局部变量以C表示

and*_*red 5 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;
}
Run Code Online (Sandbox Code Playgroud)

b的地址低于b的地址.为什么会这样?或者我做错了什么?

Cri*_*urf 4

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

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