C++:指向同一对象的两个指针共享相同的地址?
我有一个简单的指针试用版。C++:指向同一对象的两个指针共享相同的地址?
k1和k2都是指针并指向j。
我以某种方式期望k1和k2是不同的。但另一方面,如果它们只是代表整数j的地址,它们应该是相同的。
任何人都可以告诉我k1和k2之间有什么区别吗?
int j=0, *k1=&j, *k2=&j;
j=2;
std::cout<<"k1 points to "<<*k1 << " and k2 points to "<<*k2 <<std::endl;
std::cout<<" k1 is "<< k1 << " k2 is "<<k2<<std::endl;
return 0;
但结果显示
k1 points to 2 and k2 points to 2
k1 is 0x7fffffffd6fc k2 is 0x7fffffffd6fc
变量和k2
的存储本身是不同的。他们的值(即它们指向的位置)是相同的。您可以通过简单的赋值完成相同的:
int j = 0;
int *k1, *k2;
k1 = &j; // Make k1 point to the location of j
k2 = k1; // Copy the value from k1 into k2, after this k2 also points to the location of j
如果你想打印变量的位置和k2
您需要使用地址的运营商&
:
std::cout << "k1 is located at "<< &k1 << ", and k2 is located at "<< &k2 << std::endl;
在内存中,它可能可能看起来像这样:
+-------------+
| variable j | <--+--\
+-------------+ | |
| variable k1 | ---/ |
+-------------+ |
| variable k2 | ------/
+-------------+
也就是说,你有三个存储位置。其中两个值(和k2
)的值是j
的地址。
好的谢谢你的解释。当时间允许时, 将接受 – cxf54
你没有打印的和k2
地址。你打印出他们的价值。它们的值是的地址j
。
如果是打印他们的地址,像这样(注意号):
std::cout<<" k1 is "<< &k1 << " k2 is "<< &k2 << std::endl;
这些将是不同的。
我是一名hw工程师。所以从记忆的角度来看。我有三个条目。 A j B k1 C k2 因此k1和k2的值都是A,而您说B和C是不同的。对? – cxf54
@ cxf54 - 正确。这正是我所说的。 – StoryTeller
'std :: cout
为什么从指针开始? 'int x = 42,y = 42;'x和y是否相同? –