指针数组打印值

时间:2017-04-28 09:48:07

标签: c++

我对这一行提出了一个问题: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

2 个答案:

答案 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]