A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 风筝1025 初级黑马   /  2015-3-29 14:02  /  723 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. #include <stdio.h>

  2. /*
  3.         1.内存寻址由大到小,优先分配内存地址比较大的字节变量
  4.         2。变量越先定义的变量,内存的地址越大
  5.         3.取得地址的值:&变量名
  6.         4.输出地址:%p
  7. */

  8. int main(void){
  9.        
  10.            char e = 100;
  11.        
  12.         int a = 10;
  13.        
  14.         int b = 10;

  15.         int f = 100;
  16.        
  17.         char c = 'a';
  18.        
  19.         char d = 100;
  20.         /*
  21.                 %p用来输出地址
  22.                 &是一个取地址运算符,取得变量的地址
  23.         */
  24.         printf("e的地址:%p\n",&e);
  25.         printf("a的地址:%p\n",&a);
  26.         printf("b的地址:%p\n",&b);
  27.         printf("f的地址:%p\n",&f);       
  28.         printf("c的地址:%p\n",&c);
  29.         printf("d的地址:%p\n",&d);
  30.        
  31.         return 0;
  32. }
复制代码

输出:
2.png (60.02 KB, 下载次数: 0)

记得char类型的变量占一个字节,e的内存地址是0022FF1F,为啥为第二个int变量分配的内存地址相差了8个字节,是我的系统问题还是有些内存分配浪费了?

1 个回复

倒序浏览
应该是系统的问题,windows系统里面对于变量有一个分类,包括全局,静态,动态变量等等,所以可能是因为系统默认把第一个变量归类到其他类型变量里面去了,导致地址相差很多。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马