我对这一行提出了一个问题:cout << *ptr[i] << endl;
。
如果我更改&ptr[i]
,那么结果就是地址0x7ffef7402a40
。
我的问题是:我需要做些什么来从此cout << &ptr[i] << endl;
获取值,而不是地址?
const int MAX = 3;
int main () {
int var[MAX] = {10, 100, 500};
int *ptr[MAX];
for (int i = 0; i < MAX; i++) {
ptr[i] = &var[i]; // assign the address of integer.
}
for (int i = 0; i < MAX; i++) {
cout << "Value of var[" << i << "] = ";
cout << *ptr[i] << endl;
}
return 0;
}
结果是:
Value of var[0] = 10
Value of var[1] = 100
Value of var[2] = 500
答案 0 :(得分:1)
我需要做些什么才能从此cout中获取值&lt;&lt; &amp; ptr [i]&lt;&lt; endl;,而不是地址?
&
是运营商的地址。它返回对象的地址作为指针。您可以使用解除引用运算符取消引用该指针以获取该地址处的对象:
*&ptr[i]
但是,由于数组的元素本身就是指针 - 即地址 - 你仍然会得到一个包含上述代码的地址。这次它不是存储指针的地址,而是指针的值,即指向对象的地址。要获取这些指针指向的对象,可以再次取消引用:
**&ptr[i]
当然,这是毫无意义的,因为你可以首先不使用addressof运算符:
*ptr[i]
如您所见,解除引用和取地址是反向操作,连续的反向操作相互抵消。
答案 1 :(得分:0)
*
用于取消引用地址(即访问存储在该地址的值)。
&
用于读取变量的地址。
所以
ptr[i]
是变量的地址,
&ptr[i]
提供ptr[i]
存储在内存中的地址
*ptr[i]
提供地址“*ptr[i]
”的值,即var[i]