关于函数堆栈的疑惑
来源:互联网 发布:淘宝钓鱼竿金箍棒 编辑:程序博客网 时间: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;
printf("t.b = %d\n", t.b);
}
A: 上网上查了一下,当一个函数调用另一个函数的时候当前的所有局部变量都被压入了栈中,同样被压入栈中的还有函数的返回地址(即代码段中执行到的语句的指针,方便被调用的函数执行完成后跳转回来继续向下执行)和传递给下一个函数的参数(如果是有多个参数则从右到左压入栈中)。所以上面的例子中结构体变量t应该是被整个复制了一份,然后压入到栈中,之后调用函数func会去栈中将参数读取出来然后对其进行操作,上面的例子中只是对t的克隆进行操作,所以t是没有发生任何变化的,如果要想使其发生变化的话要将它的指针传递给func进行操作。
PS. 在main调用了func之后t是否被压入了栈中?如果是的话那么将&t传递给func进行操作的话,其操作的是栈中的t吗?栈中的内容可以这样子通过指针进行修改吗?这些细节暂时不去理会。
- 关于函数堆栈的疑惑
- 关于find_first_of函数的疑惑...
- 关于指向函数的指针的疑惑
- 关于一个虚函数的疑惑
- windows堆栈段的疑惑~
- 关于教育质量的疑惑
- 关于接口的疑惑
- 关于CreateProcess的疑惑
- 关于指针的疑惑
- 关于getopt_long的疑惑
- 关于MVC的疑惑
- 关于setVisibility的疑惑
- 关于Manifest的疑惑
- 关于printf的疑惑
- 关于VM_COPYDATA的疑惑
- 关于RecyclerView的疑惑
- 关于kafka的疑惑
- 关于迭代器的疑惑
- java中的迭(die)代器
- 实时系统解决方案 TIBCO Rendezvous — 技术介绍(消息中间件|基于数据库的主动推送)
- 几个有趣的故事
- Android剪切板
- 通过JS传递中文解决在Action中乱码问题
- 关于函数堆栈的疑惑
- HMAC-SHA1加密 和MD5加密
- Spree安装手记
- Oracle ADF 异常:Caused By: java.sql.SQLSyntaxErrorException: ORA-01722: 无效数字
- 免安装Oracle客户端使用PL/SQL连接Oracle的2种方法
- 三探C#类与结构体究竟谁快——MSIL(微软中间语言)解读
- hdoj 1061Rightmost Digit
- 分页文本框的乱码问题解决
- 以求医为例谈搜索引擎排序