关于栈中变量分配的问题
写了个小程序,想看看局部变量包括指针变量在栈中的分配地址程序代码:
#include <stdio.h> /* test the pointer to pointer */ int main() { char c; char *p1; char **p2; p1 = &c; p2 = &p1; printf("%p\n", &c); //printf("%p\n", p1); printf("%p\n", &p1); //printf("%p\n", p2); printf("%p\n", &p2); return 0; }
输出结果是
0022FF1F
0022FF18
0022FF14
我知道在栈中,变量的分配是由高地址向低地址顺序分配,而且在32位系统中,指针变量分配四个字节,所以我明白p1和p2的地址相差4个值,但是不明白c的地址和p1的地址为什么相差这么多?按理说应该相差1的。
我将char c;改为int i;后,i的地址是0022FF1C,和我的想法就一致了。
请教字符c的地址为什么是这样?