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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 曦正 中级黑马   /  2016-2-2 17:31  /  1225 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

代码如下:
  1. #include <stdio.h>
  2. void ap(){
  3.     int c=100;
  4.     printf("c==%p\n",&c);

  5. }
  6. //c的地址是0x7fff5fbff82c
  7. void bp(){
  8.     int b=200;
  9.     printf("b==%p\n",&b);
  10. }
  11. //b的地址是0x7fff5fbff82c
  12. int main(int argc,const char* argv[]){
  13.     int a=100;
  14.     int *p=&a;

  15.     ap();
  16.     bp();

  17.     return 0;
  18. }
复制代码
以上代码输出的变量c跟变量b的地址是一样的,都是0x7fff5fbff82c,这个没有什么疑问,因为b在c的作用域结束之后,系统重新把变量b分配在c之前的地址,这个可以理解,问题在下面,我在变量a后面也打印了一行地址,代码如下:
  1. #include <stdio.h>
  2. void ap(){
  3.     int c=100;
  4.     printf("c==%p\n",&c);

  5. }
  6. //c的地址是0x7fff5fbff81c

  7. void bp(){
  8.     int b=200;
  9.     printf("b==%p\n",&b);
  10. }
  11. //b的地址是0x7fff5fbff81c

  12. int main(int argc,const char* argv[]){
  13.     int a=100;
  14.     int *p=&a;

  15.     printf("a==%p\n",p);//a的地址是0x7fff5fbff84c
  16.     ap();
  17.     bp();

  18.     return 0;
  19. }
复制代码
这样变量a的地址立马就变成了
0x7fff5fbff84c,b跟c的地址却变成了0x7fff5fbff81c。
问题:1.为什么地址不连续?
2. 地址0x7fff5fbff83c、0x7fff5fbff82c去哪了??
在线求回复~~~~~~~ *_*

8 个回复

倒序浏览
地址是连续的,你放心! 只要你的电脑开着就会占内存,只是你不知道而已。
回复 使用道具 举报
而且内存分配是从高地址往低地址分配的。
回复 使用道具 举报
还有一点你需要知道,地址是16位的,0123456789abcdef超过f就向前进一位
回复 使用道具 举报
韦德460 发表于 2016-2-5 14:26
还有一点你需要知道,地址是16位的,0123456789abcdef超过f就向前进一位

感觉是有其他函数或者什么东西占了中间的48个字节
回复 使用道具 举报
曦正 发表于 2016-2-5 18:40
感觉是有其他函数或者什么东西占了中间的48个字节

那肯定的!!!qq啊,音乐啊什么的都有可能
回复 使用道具 举报
麻烦楼主帮我去顶一下贴,谢谢
长沙1220iOS基础班王锐,生活的理想就是为了理想的生活!
http://bbs.itheima.com/thread-275739-1-1.html
(出处: 黑马程序员IT技术论坛)
回复 使用道具 举报
奔跑的蚂蚁iOS 来自手机 初级黑马 2016-2-11 10:14:42
8#
这个很好理解啊,函数的入口是主函数,地址从高位开始分配,你定义了指针,就占用了82c83c
回复 使用道具 举报
奔跑的蚂蚁iOS 来自手机 初级黑马 2016-2-11 10:17:06
9#
程序的入口是主函数,说成函数的入口了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马