复合语句中变量的存储位置

lbh2001 2008-07-23 10:56:53
C语言中允许在复合语句中定义局部变量
请问它的存储位置在哪,貌似不在栈中

int i = 0;
00401028 mov dword ptr [ebp-4],0
420: {
421: int j = 100;
0040102F mov dword ptr [j],64h
422: printf("%d\n", j);
00401036 mov eax,dword ptr [j]
00401039 push eax
0040103A push offset string "[3] %d,%d,%d," (0042201c)
0040103F call printf (004010e0)
00401044 add esp,8
423: }

mov dword ptr [j],64h ------>怎么理解
...全文
140 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
ChamPagneZ 2008-07-23
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 lbh2001 的回复:]
int main()
int main(int argc, char *argv[])

[/Quote]
int main(void)
int main(int argc, char *argv[])
/////////////////////////////////
只有这两个是标准的,
其他的都是编译器的行为.编译器支持就可以那样写.
xkyx_cn 2008-07-23
  • 打赏
  • 举报
回复
呵呵,难道就不允许特例?

标准规定的main就是一个特例
薛定谔之死猫 2008-07-23
  • 打赏
  • 举报
回复
这个是crt决定的,只要它能找到入口
lbh2001 2008-07-23
  • 打赏
  • 举报
回复
还是在栈上,不信你取地址就知道了

C/C++ code int i = 1;
int *pi = &i;

{
int j = 100;
int *pj = &j;

printf("%d\n", j);
}

嗯,我明白了
#include <stdio.h>

int main()
{
int i = 0;
{
int j = 100;
printf("%d\n", j);
printf("%x\n", &i);
printf("%x\n", &j);
}
return 0;
}


还有一问题

为何main函数允许以下原型
int main()
int main(int argc, char *argv[])
函数不是只允许唯一原型吗
xkyx_cn 2008-07-23
  • 打赏
  • 举报
回复
还是在栈上,不信你取地址就知道了
	int i = 1;
int *pi = &i;

{
int j = 100;
int *pj = &j;

printf("%d\n", j);
}
aozhi 2008-07-23
  • 打赏
  • 举报
回复
把100给j啊?
薛定谔之死猫 2008-07-23
  • 打赏
  • 举报
回复
mov dword ptr [j],64h
把100保存到j的地址所指向的位置,那不是给j赋值嘛
00401028 mov dword ptr [ebp-4],0
这里已经进行栈上的操作了

69,335

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧