函数调用时刻的堆栈情况

#include<stdio.h>

struct _node
{
    int a;
    int b;
};

void test(int a,int b)
{
    int c=1;
    int d=1;
    struct _node node;

    node.a=1;
    node.b=2;

    printf("b: %p\n", &b);
    printf("a: %p\n", &a);
    printf("c: %p\n", &c);
    printf("d: %p\n", &d);
    printf("node: %p\n", &node);
    printf("node.a: %p\n", &node.a);
    printf("node.b: %p\n", &node.b);

}

int main(void)
{
    test(1,1);
    return 0;
}
b: 0012FEF8
a: 0012FEF4
c: 0012FEE8
d: 0012FEE4
node: 0012FEDC
node.a: 0012FEDC
node.b: 0012FEE0

即入栈顺序是:

int b;

int a;

int c;

int d;

int node.b

int node.a

为了确保node的地址就是node.a的地址,所以node.b必须先进栈。

原文地址:https://www.cnblogs.com/zzj2/p/3026497.html