一个关于指针的问题很疑惑...

时间:2022-12-18 00:32:30

   看书时碰到一个疑惑  
各位看下 面这段代码     按道理里说 下面这个 ptr1 输出的地址应该和ptr的地址是一样的 

#include<iostream.h>
void main()
{

 int val = 5,a=3;
int *ptr =&val;
cout<<"val的值"<<val<<"\n";
cout<<"val的地址"<<&val<<"\n";
cout<<"ptr的值"<<ptr<<"\n";
cout<<"ptr的地址"<<&ptr<<"\n";
cout<<"ptr指向地址的值"<<*ptr<<"\n";

  //ptr=&a;
  int *ptr1=ptr;

  
cout<<"val的值"<<val<<"\n";
cout<<"ptr1指向地址的值"<<*ptr1<<"\n";
cout<<"ptr1的地址"<<&ptr1<<"\n";
//cout<<"val的地址"<<&val<<"\n";
}



  运行结果却是两个指针的地址不是一样的   很疑惑  谁能帮我解答下  

8 个解决方案

#1


指针也是变量,也需要有地址,这是两个指针,保存在内存中的两个地方,当然不一样

#2


int *ptr1=ptr;
这个只是使ptr1和ptr指向同一个地址,但它们本身是两个不同的变量,存储在不同的位置,所以&ptr1,&ptr不同

#3


两个指针的地址是不一样的,一样的是他们的值

#4


ptr1和ptr的内容一样,也就是ptr == ptr1
ptr1/ptr自己的地址当然不一样,也就是(&ptr) != (&ptr1)
我想不明白为什么楼主认为第二种情况应该一样?

#5


除了楼上说的一个问题外,建议楼主打印指针别用cout.

http://blog.csdn.net/hairetz/archive/2009/04/27/4129788.aspx

#6


引用 4 楼 arong1234 的回复:
ptr1和ptr的内容一样,也就是ptr == ptr1
ptr1/ptr自己的地址当然不一样,也就是(&amp;ptr) != (&amp;ptr1)
我想不明白为什么楼主认为第二种情况应该一样?

   因为指针在定义是 *ptr在初始化时时用的 val 所以*ptr 的指向内容和 她的&ptr分别是Val的
     那么我现在用 ptr出初始化指针 *ptr1 那么是不是 *ptr1 和&ptr1  和 应该和ptr是一样咧????
  但现在指向的值是一样  地址却不一样

#7


引用 1 楼 thefirstz 的回复:
指针也是变量,也需要有地址,这是两个指针,保存在内存中的两个地方,当然不一样

          我是用ptr 去初始化指针*ptr1 按理说连个指针的地址和值应该都是一样的呀
   但现在只是值一样 地址却不一样...  有点疑惑...

#8


引用 5 楼 hairetz 的回复:
除了楼上说的一个问题外,建议楼主打印指针别用cout.

http://blog.csdn.net/hairetz/archive/2009/04/27/4129788.aspx


 正解  .... 非常感谢... 

#1


指针也是变量,也需要有地址,这是两个指针,保存在内存中的两个地方,当然不一样

#2


int *ptr1=ptr;
这个只是使ptr1和ptr指向同一个地址,但它们本身是两个不同的变量,存储在不同的位置,所以&ptr1,&ptr不同

#3


两个指针的地址是不一样的,一样的是他们的值

#4


ptr1和ptr的内容一样,也就是ptr == ptr1
ptr1/ptr自己的地址当然不一样,也就是(&ptr) != (&ptr1)
我想不明白为什么楼主认为第二种情况应该一样?

#5


除了楼上说的一个问题外,建议楼主打印指针别用cout.

http://blog.csdn.net/hairetz/archive/2009/04/27/4129788.aspx

#6


引用 4 楼 arong1234 的回复:
ptr1和ptr的内容一样,也就是ptr == ptr1
ptr1/ptr自己的地址当然不一样,也就是(&amp;ptr) != (&amp;ptr1)
我想不明白为什么楼主认为第二种情况应该一样?

   因为指针在定义是 *ptr在初始化时时用的 val 所以*ptr 的指向内容和 她的&ptr分别是Val的
     那么我现在用 ptr出初始化指针 *ptr1 那么是不是 *ptr1 和&ptr1  和 应该和ptr是一样咧????
  但现在指向的值是一样  地址却不一样

#7


引用 1 楼 thefirstz 的回复:
指针也是变量,也需要有地址,这是两个指针,保存在内存中的两个地方,当然不一样

          我是用ptr 去初始化指针*ptr1 按理说连个指针的地址和值应该都是一样的呀
   但现在只是值一样 地址却不一样...  有点疑惑...

#8


引用 5 楼 hairetz 的回复:
除了楼上说的一个问题外,建议楼主打印指针别用cout.

http://blog.csdn.net/hairetz/archive/2009/04/27/4129788.aspx


 正解  .... 非常感谢...