关于函数堆栈的疑惑

来源:互联网 发布:淘宝钓鱼竿金箍棒 编辑:程序博客网 时间:2024/05/16 20:30

在下面的函数中结构体变量t被传入func的时候,到底传入的是指针还是整个结构体变量?这个传入的值保存在哪里?进入了func函数后main函数中的变量值又保存在哪里?一个函数调用另一个函数的时候都进行了哪些操作?内存中发生了哪些变化?

typedef struct _TStr{

   int a[10];

   int b;

}TStr;

void func(TStr t)

{

   t.b = 10;

}

void main()

{

   TStr t;

   t.b = 0;

   func(t);

   printf("t.b = %d\n", t.b);

}


A: 上网上查了一下,当一个函数调用另一个函数的时候当前的所有局部变量都被压入了栈中,同样被压入栈中的还有函数的返回地址(即代码段中执行到的语句的指针,方便被调用的函数执行完成后跳转回来继续向下执行)和传递给下一个函数的参数(如果是有多个参数则从右到左压入栈中)。所以上面的例子中结构体变量t应该是被整个复制了一份,然后压入到栈中,之后调用函数func会去栈中将参数读取出来然后对其进行操作,上面的例子中只是对t的克隆进行操作,所以t是没有发生任何变化的,如果要想使其发生变化的话要将它的指针传递给func进行操作。

PS. 在main调用了func之后t是否被压入了栈中?如果是的话那么将&t传递给func进行操作的话,其操作的是栈中的t吗?栈中的内容可以这样子通过指针进行修改吗?这些细节暂时不去理会。





原创粉丝点击