&符号"&"在指针前做了什么?

use*_*163 9 c c++ pointers reference operators

在调用函数时,我经常在函数参数中看到指针前面的&符号.

例如

int *ptr;
randomFunction(&ptr);
Run Code Online (Sandbox Code Playgroud)

我做了一些研究,发现这意味着该函数使用指针指针.&指针前面的符号是用来表示这个还是做其他事情?

her*_*tao 27

它是指针的指针.

&是引用运算符,可以读作address of.在您的示例中,它将获得另一个指针,即作为其参数给出的指针的地址,即指向指针的指针.

请看以下示例:

int **ipp;
int i = 5, j = 6, k = 7;
int *ip1 = &i, *ip2 = &j;
ipp = &ip1;
Run Code Online (Sandbox Code Playgroud)

你会得到:

在此输入图像描述

在上面的例子中,ipp是一个指向指针的指针.ipp存储地址ip1ip1存储地址i.

您可以查看Pointers to Pointers以获取更多信息.

  • 一种偏离主题,但为什么要使用指针指针? (2认同)

Eri*_*ert 5

退后一步.指针运算符的基本规则是:

  • *操作者打开一类型的pointer to T可变型的T.
  • &操作者打开一可变型的T类型的pointer to T.

所以,当你有

int *ptr;
Run Code Online (Sandbox Code Playgroud)

ptr是一个类型的变量pointer to int.因此*ptr是一个类型的变量int- *指针转换为变量.你可以说*ptr = 123;.

因为ptr是类型的变量pointer to int,所以&ptr是类型的 - 而不是变量 - pointer to pointer to int:

int **pp = &ptr;
Run Code Online (Sandbox Code Playgroud)

&ptr是类型的值pointer to pointer to int.pp是一个类型的变量pointer to pointer to int. *pp是一个类型的变量,pointer to int实际上是变量相同的变量ptr.这*反过来&.

合理?