我有一个简单的指针试验。
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;
答案 0 :(得分:2)
变量k1
和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
如果您要打印变量k1
和k2
的位置,则需要使用地址运算符&
:
std::cout << "k1 is located at "<< &k1 << ", and k2 is located at "<< &k2 << std::endl;
在内存中,可能看起来像这样:
+-------------+
| variable j | <--+--\
+-------------+ | |
| variable k1 | ---/ |
+-------------+ |
| variable k2 | ------/
+-------------+
也就是说,您有三个内存位置。其中两个(k1
和k2
)的值是j
的地址。
答案 1 :(得分:1)
您没有打印k1
和k2
的地址。你打印了他们的价值。它们的值 j
的地址。
如果您 打印他们的地址,请注意(请注意&符号):
std::cout<<" k1 is "<< &k1 << " k2 is "<< &k2 << std::endl;
那些会有所不同。