[英]Want to understand how function variables are stored in stack
我试图了解如何将变量存储在内存堆栈中以及printf语句正在打印什么。 您对此的见识将受到高度赞赏。 谢谢。
Ideone链接http://ideone.com/uWvPpX
#include <stdio.h>
int main(void) {
foo("%x");
return 0;
}
void foo(char *str)
{
char c='c';
printf(str);
printf("\n%x",&c);
}
%x
是一种格式说明符,指示您要以小写十六进制格式打印。 因此,当您在第一个printf
未指定数据时,结果是不确定的。 即使代码可以编译-它也不完整!
因此,让我们先修复代码-这是修改后的代码
#include <stdio.h>
void foo(char *str);
int main(int argc, char* argv[])
{
foo("%x");
return 0;
}
void foo(char *str)
{
char c='c';
printf(str,c);
printf("\n%x",&c);
}
现在回答您的问题“如何将变量存储在内存堆栈中”每次将值压入或弹出堆栈时,堆栈指针都会注册堆栈的顶部-调整堆栈指针使其指向空闲状态记忆。 然后是堆栈帧,它对应于尚未以返回终止的函数调用。
另一部分是“ printf语句正在打印什么”。 printf中的第一个参数是格式说明符,第二个参数开始是要用于那些格式说明符的数据。 当您的第一个原始printf中没有c时-它只是拿起相邻的int并将其打印为指定的%x。 在修订的第一份printf中,我以十六进制打印出c的c值。 在第二个printf中,使它打印堆栈中C变量的地址。
检查这些链接了解更多详情- https://en.wikipedia.org/wiki/Call_stack#Structure另外其他#1 Q&至于在右侧窗格中显示出来。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.