先定义的变量地址比后定义的变量地址高?

ImAmelie 2014-07-19 11:51:49

#include<stdio.h>
int main()
{
int a, b, c;
int d, e, f;
printf("%p\n", &a);
printf("%p\n", &b);
printf("%p\n", &c);
printf("%p\n", &d);
printf("%p\n", &e);
printf("%p\n", &f);
return 0;
}

为什么a的地址要比b的高?a先声明,应该a的地址比b的低才是呀?
...全文
322 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
lin5161678 2014-07-20
  • 打赏
  • 举报
回复
引用 5 楼 lin5161678 的回复:

纠正 这图是 A < C < B
C < A < B是这张图
lin5161678 2014-07-20
  • 打赏
  • 举报
回复

楼上几位
所谓栈生长方向
所谓地址分配

误导够了

怎么定义顺序 和 分配顺序 没有必然联系
FeelTouch Labs 2014-07-20
  • 打赏
  • 举报
回复
uqwl_ 2014-07-20
  • 打赏
  • 举报
回复
栈是从高地址向低地址分配的,堆是从低到高,overlap了就说明内存耗尽了。。
ImAmelie 2014-07-20
  • 打赏
  • 举报
回复
引用 1 楼 lin5161678 的回复:
未必 怎么安排都有可能 顺序定义 ABC 内存顺序 可能是 ACB CAB CBA BAC.....
为什么我测出来的是 a>b>c>d>e>f
lin5161678 2014-07-20
  • 打赏
  • 举报
回复
未必 怎么安排都有可能 顺序定义 ABC 内存顺序 可能是 ACB CAB CBA BAC.....
Intel0011 2014-07-20
  • 打赏
  • 举报
回复
引用 楼主 u013491662 的回复:

#include<stdio.h>
int  main()
{
	int a, b, c;
	int d, e, f;
	printf("%p\n", &a);
	printf("%p\n", &b);
	printf("%p\n", &c);
	printf("%p\n", &d);
	printf("%p\n", &e);
	printf("%p\n", &f);
	return  0;
}
为什么a的地址要比b的高?a先声明,应该a的地址比b的低才是呀?
VC6 Release模式下,a的地址要比b的低 0012FF38 0012FF3C 0012FF40 0012FF44 0012FF48 0012FF4C VC6 Debug模式下,a的地址要比b的高 0012FF7C 0012FF78 0012FF74 0012FF70 0012FF6C 0012FF68 其实不要纠结变量的地址顺序,除非你想hack 从编译器的角度来说,变量的地址是可以随机安排的,又不影响寻址使用,不一定非要按排列顺序
lin5161678 2014-07-20
  • 打赏
  • 举报
回复
引用 2 楼 u013491662 的回复:
[quote=引用 1 楼 lin5161678 的回复:] 未必 怎么安排都有可能 顺序定义 ABC 内存顺序 可能是 ACB CAB CBA BAC.....
为什么我测出来的是 a>b>c>d>e>f[/quote]没有为什么 所谓怎么安排都有可能 除了包括 ACB CAB BAC之外 自然包括 CBA ABC 这样的情况 这才叫做 "都有可能"

69,370

社区成员

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

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