我有一个有关此行的问问题: 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
我该怎么做才能从这个cout&lt;&lt;&amp; ptr [i]&lt;&lt;endl;,而不是地址?
&
是操作员的地址。它将对象的地址作为指针返回。您可以使用DEREFERCE操作员来取消指针以在该地址获取对象:
*&ptr[i]
但是,由于数组的元素本身就是指针 - 即地址 - 您仍然会在上面的代码上获得一个地址。这次不是指针存储的地址,而是指针的值,即指向对象的地址。要获取这些指针指向的对象,您可以再次解除:
**&ptr[i]
当然,这是毫无意义的,因为您不能首先使用操作员地址:
*ptr[i]
如您所见,取消和接收地址是逆操作,并且连续的逆操作相互取消。
*
用于放置一个地址(即访问存储在此地址的值(。和&
用于读取变量的地址。
so
-
ptr[i]
是变量的地址, -
&ptr[i]
给出了ptr[i]
存储在内存中的地址 -
*ptr[i]
给出地址为"*ptr[i]
"的值,即var[i]