黑马程序员技术交流社区

标题: 变量内存地址问题 [打印本页]

作者: 曦正    时间: 2016-2-2 17:31
标题: 变量内存地址问题
代码如下:
  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去哪了??
在线求回复~~~~~~~ *_*

作者: 韦德460    时间: 2016-2-5 14:23
地址是连续的,你放心! 只要你的电脑开着就会占内存,只是你不知道而已。
作者: 韦德460    时间: 2016-2-5 14:24
而且内存分配是从高地址往低地址分配的。
作者: 韦德460    时间: 2016-2-5 14:26
还有一点你需要知道,地址是16位的,0123456789abcdef超过f就向前进一位
作者: 曦正    时间: 2016-2-5 18:40
韦德460 发表于 2016-2-5 14:26
还有一点你需要知道,地址是16位的,0123456789abcdef超过f就向前进一位

感觉是有其他函数或者什么东西占了中间的48个字节
作者: 韦德460    时间: 2016-2-5 18:52
曦正 发表于 2016-2-5 18:40
感觉是有其他函数或者什么东西占了中间的48个字节

那肯定的!!!qq啊,音乐啊什么的都有可能
作者: 韦德460    时间: 2016-2-5 18:53
麻烦楼主帮我去顶一下贴,谢谢
长沙1220iOS基础班王锐,生活的理想就是为了理想的生活!
http://bbs.itheima.com/thread-275739-1-1.html
(出处: 黑马程序员IT技术论坛)
作者: 奔跑的蚂蚁iOS    时间: 2016-2-11 10:14
这个很好理解啊,函数的入口是主函数,地址从高位开始分配,你定义了指针,就占用了82c83c
作者: 奔跑的蚂蚁iOS    时间: 2016-2-11 10:17
程序的入口是主函数,说成函数的入口了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2