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存储地址ip1并ip1存储地址i.
您可以查看Pointers to Pointers以获取更多信息.
退后一步.指针运算符的基本规则是:
*操作者打开一值类型的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.这*是反过来的&.
合理?