代码如下:- #include <stdio.h>
- void ap(){
- int c=100;
- printf("c==%p\n",&c);
- }
- //c的地址是0x7fff5fbff82c
- void bp(){
- int b=200;
- printf("b==%p\n",&b);
- }
- //b的地址是0x7fff5fbff82c
- int main(int argc,const char* argv[]){
- int a=100;
- int *p=&a;
- ap();
- bp();
- return 0;
- }
复制代码 以上代码输出的变量c跟变量b的地址是一样的,都是0x7fff5fbff82c,这个没有什么疑问,因为b在c的作用域结束之后,系统重新把变量b分配在c之前的地址,这个可以理解,问题在下面,我在变量a后面也打印了一行地址,代码如下:
- #include <stdio.h>
- void ap(){
- int c=100;
- printf("c==%p\n",&c);
- }
- //c的地址是0x7fff5fbff81c
- void bp(){
- int b=200;
- printf("b==%p\n",&b);
- }
- //b的地址是0x7fff5fbff81c
- int main(int argc,const char* argv[]){
- int a=100;
- int *p=&a;
- printf("a==%p\n",p);//a的地址是0x7fff5fbff84c
- ap();
- bp();
- return 0;
- }
复制代码 这样变量a的地址立马就变成了0x7fff5fbff84c,b跟c的地址却变成了0x7fff5fbff81c。
问题:1.为什么地址不连续?
2. 地址0x7fff5fbff83c、0x7fff5fbff82c去哪了??
在线求回复~~~~~~~ *_*
|
|