主题:为什么地址会相邻
lansane
[专家分:0] 发布于 2011-06-02 16:51:00
#include<stdio.h>
int main()
{
char c1=1;
short s1,s2;
char c2;
int i1,i2,i3,i4;
short s3 ;
s2=511;
c2='a';
printf("%x\t%x\t%x\n",&s1,&s2,&c2);
return 0;
}
运行结果 bfffe344 bfffe342 bfffe341
为什么c2 ,s2的地址会是相邻的
回复列表 (共4个回复)
沙发
bruceteen [专家分:42660] 发布于 2011-06-03 08:31:00
屁问题,哪个标准规定说“不可以”相邻了?
板凳
shujujiegou01 [专家分:1070] 发布于 2011-06-03 12:11:00
bfffe345 &c1
bfffe344 &s1
bfffe342 &s2
bfffe341 &c2
你定义变量的时候,就是按照高高低低的原则存放在内存中的。
内存中一个char占1个byte.
一个short类型占2个byte
3 楼
yjypm8460859 [专家分:970] 发布于 2011-06-06 22:57:00
[quote]
6: {
7: unsigned char i=1;
C:0x0003 7F01 MOV R7,#0x01
8: unsigned char j=1;
C:0x0005 750801 MOV 0x08,#0x01
9: unsigned char m=1;
C:0x0008 750901 MOV 0x09,#0x01
[/quote]
在C51中局部变量定义在寄存器中,地址也是连续的。。应该去看下PE结构
4 楼
cgl_lgs [专家分:21040] 发布于 2011-06-07 07:29:00
跟PE结构没什么关系。局部变量就是挨个儿存滴。不过你这是调试版程序吧,用RELEASE版本试试?或许就不一样了喔:)
我来回复