小编Zon*_*eur的帖子

意外的地址输出

我试图弄清楚地址如何分配给堆栈上的变量.我运行下面的小程序:

int main()
{
    long a;
    int b;
    int c;

    printf("&a = %p\n", &a);
    printf("&b = %p\n", &b);
    printf("&c = %p\n", &c);
}
Run Code Online (Sandbox Code Playgroud)

我预期的输出是(考虑到地址正在下降):

&a = 0x7fff6e1acb88
&b = 0x7fff6e1acb80
&c = 0x7fff6e1acb7c
Run Code Online (Sandbox Code Playgroud)

但相反,我得到了:

&a = 0x7fff6e1acb88
&b = 0x7fff6e1acb80
&c = 0x7fff6e1acb84
Run Code Online (Sandbox Code Playgroud)

为什么c变量位于ab变量之间?变量是否在声明时未放入堆栈?

我试着更换的类型a,从longint,我得到这个:

&a = 0x7fff48466a74
&b = 0x7fff48466a78
&c = 0x7fff48466a7c
Run Code Online (Sandbox Code Playgroud)

在这里,我不明白为什么地址会上升,而它们之前会下降?

我使用了编译程序gcc version 4.7.2 (Ubuntu/Linaro 4.7.2-11precise2),如果有任何帮助的话.

c pointers

6
推荐指数
3
解决办法
146
查看次数

标签 统计

c ×1

pointers ×1