菜鸟贴,这内存地址怎么是倒序呢?

balabala_sean 2013-09-09 04:51:45

short a = 12256;
char b = 90;
float c = 1000.12;
int d = 1;
printf("a address = %d\n",&a);//2686790
printf("b address = %d\n",&b);//2686789
printf("c address = %d\n",&c);//2686784
printf("d address = %d\n",&d);//2686780
system("pause");
return 0;
...全文
391 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
majia2011 2013-09-12
  • 打赏
  • 举报
回复
咱们靠普点吧,就是栈的事情。 可别乱说一气,那样会累死新人的。
WingForce 2013-09-11
  • 打赏
  • 举报
回复
引用 2 楼 zhao4zhong1 的回复:
计算机组成原理→DOS命令→汇编语言→C语言(不包括C++)、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言(包括C++)、架构…… 对学习编程者的忠告: 眼过千遍不如手过一遍! 书看千行不如手敲一行! 手敲千行不如单步一行! 单步源代码千行不如单步对应汇编一行! VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化,这样过一遍不就啥都明白了吗。 对VC来说,所谓‘调试时’就是编译连接通过以后,按F10或F11键单步执行一步以后的时候,或者在某行按F9设了断点后按F5执行停在该断点处的时候。 (Turbo C或Borland C用Turbo Debugger调试,Linux或Unix下用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。)
张老湿这个自动回帖不给力啊,最起码应该应用支持向量机对lz发帖内容进行分类,然后选择相关的内容回复。这样统一回复显得很不专业。
sanzhong104204 2013-09-11
  • 打赏
  • 举报
回复
引用 8 楼 lin5161678 的回复:
引用 3 楼 zshuaiqin 的回复:
大小端存储模式的原因,一个是栈从上往下减,另一个反过来
这个问题和大小端无关
栈增长方式分为向下增长和向上增长两类,也就是在压栈时栈顶指针(对应于局部自动变量的地址)的走向。 你得出的地址倒序说明在那个机器、那个OS上,栈的增长方式是:递减。 栈的增长方式跟硬件体系结构相关,跟操作系统应该也有关系。
zhao 2013-09-11
  • 打赏
  • 举报
回复
局部变量是在栈上分配空间的,windows下栈是向下增长的!
modyaj 2013-09-10
  • 打赏
  • 举报
回复
这就证明的 “栈” 这个名字不是随便启的
lm_whales 2013-09-10
  • 打赏
  • 举报
回复
倒序比较正常,而且很自然,有些编译器可能是乱序的.
  • 打赏
  • 举报
回复
引用 8 楼 lin5161678 的回复:
引用 3 楼 zshuaiqin 的回复:
大小端存储模式的原因,一个是栈从上往下减,另一个反过来
这个问题和大小端无关
正确。变量的地址是编译器分配的,正向、逆向、乱序都有可能。
lin5161678 2013-09-10
  • 打赏
  • 举报
回复
引用 4 楼 max_min_ 的回复:

//首先打印地址是%p
 printf("a address = %p\n",&a);//2686790

//存储在栈空间,符合栈的数据结构方式
//先进后出
这只是某一个实现这一做而已 C的给这些对象分配内存 未必会按照这个 栈得先进后出的 规则的
lin5161678 2013-09-10
  • 打赏
  • 举报
回复
引用 3 楼 zshuaiqin 的回复:
大小端存储模式的原因,一个是栈从上往下减,另一个反过来
这个问题和大小端无关
zybjtu 2013-09-10
  • 打赏
  • 举报
回复
引用 楼主 cowfishy 的回复:

    short a = 12256;
    char b = 90;
    float c = 1000.12;
    int d = 1;
    printf("a address = %d\n",&a);//2686790
    printf("b address = %d\n",&b);//2686789
    printf("c address = %d\n",&c);//2686784
    printf("d address = %d\n",&d);//2686780
    system("pause");
    return 0;
这个不一定,不同的系统结果可能不同
max_min_ 2013-09-09
  • 打赏
  • 举报
回复

//首先打印地址是%p
 printf("a address = %p\n",&a);//2686790

//存储在栈空间,符合栈的数据结构方式
//先进后出
艾薇儿More 2013-09-09
  • 打赏
  • 举报
回复
大小端存储模式的原因,一个是栈从上往下减,另一个反过来
赵4老师 2013-09-09
  • 打赏
  • 举报
回复
计算机组成原理→DOS命令→汇编语言→C语言(不包括C++)、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言(包括C++)、架构…… 对学习编程者的忠告: 眼过千遍不如手过一遍! 书看千行不如手敲一行! 手敲千行不如单步一行! 单步源代码千行不如单步对应汇编一行! VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化,这样过一遍不就啥都明白了吗。 对VC来说,所谓‘调试时’就是编译连接通过以后,按F10或F11键单步执行一步以后的时候,或者在某行按F9设了断点后按F5执行停在该断点处的时候。 (Turbo C或Borland C用Turbo Debugger调试,Linux或Unix下用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。)
hordemark 2013-09-09
  • 打赏
  • 举报
回复
因为是在stack申请的。还有打印地址用%p,如果不支持,可以使用%u,%lu

69,382

社区成员

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

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