c ++:指向同一个对象的两个指针共享同一个地址?

时间:2017-08-10 06:14:57

标签: c++ pointers

我有一个简单的指针试验。

k1和k2都是指针,指向j。

我不知何故,期待k1和k2不同。但另一方面,如果它们只是表示整数j的地址,它们应该是相同的。

任何人都可以告诉我k1和k2之间的区别是什么?

.csv

但结果显示

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;

2 个答案:

答案 0 :(得分:2)

变量k1k2本身的存储空间不同。他们的(即他们指向的地方)是相同的。你可以通过简单的任务完成同样的工作:

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

如果您要打印变量k1k2的位置,则需要使用地址运算符&

std::cout << "k1 is located at "<< &k1 << ", and k2 is located at "<< &k2 << std::endl;

在内存中,可能看起来像这样:

+-------------+
| variable j  | <--+--\
+-------------+    |  |
| variable k1 | ---/  |
+-------------+       |
| variable k2 | ------/
+-------------+

也就是说,您有三个内存位置。其中两个(k1k2)的值是j的地址。

答案 1 :(得分:1)

您没有打印k1k2的地址。你打印了他们的价值。它们的值 j的地址。

如果您 打印他们的地址,请注意(请注意&符号):

std::cout<<" k1 is "<< &k1 << " k2 is "<< &k2 << std::endl;

那些会有所不同。