在这段代码中:
int* a;
int* b;
int c;
int* d;
a=new int(5);
b=&(*a);
c=*a;
d=&c;
cout<<"*a = "<<*a<<endl;
cout<<"a = "<<a<<endl;
cout<<"b ="<<b<<endl;
cout<<"d = "<<d<<endl;
Run Code Online (Sandbox Code Playgroud)
我明白了:
*a = 5
a = 0x83a2008
b =0x83a2008
d = 0xbfbfe540
Run Code Online (Sandbox Code Playgroud)
为什么d与b不同?他们俩都不是&(*a)?如何用一行得到d结果?
非常感谢.
a指向一个动态分配的位置,保持值为5.当您这样做时c = *a;,您将从该动态分配的位置复制值 5 c.然后,您将获取地址c并将其分配给d(并将其打印出来).
当你最终得到这样的东西:

实线表示指向位置的指针.虚线表示数据的移动.
c是它自己int而不是int*.当你说c = *a,你实际上是将指向的值赋给a一个单独的整数,并在内存中有自己的空间(即使这int不是一个int*,它仍然必须存在于内存中的某个地方).
所以,当你说d = &c,你得到的地址c,而不是价值a.