回 帖 发 新 帖 刷新版面

主题:为什么地址会相邻

#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个回复)

沙发

屁问题,哪个标准规定说“不可以”相邻了?

板凳


bfffe345   &c1
bfffe344   &s1
bfffe342   &s2 
bfffe341   &c2
你定义变量的时候,就是按照高高低低的原则存放在内存中的。
内存中一个char占1个byte.
一个short类型占2个byte

3 楼

[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 楼

跟PE结构没什么关系。局部变量就是挨个儿存滴。不过你这是调试版程序吧,用RELEASE版本试试?或许就不一样了喔:)

我来回复

您尚未登录,请登录后再回复。点此登录或注册