什么&符号“&”在指针面前做什么?

时间:2014-01-22 03:15:17

标签: c++ c pointers reference operators

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

E.g。

int *ptr;
randomFunction(&ptr);

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

4 个答案:

答案 0 :(得分:26)

它是指向指针的指针。

&是引用运算符,可以读作address of。在你的例子中,它将获得另一个指针,即指针给出的指针的地址,即指向指针的指针。

请看以下示例:

int **ipp;
int i = 5, j = 6, k = 7;
int *ip1 = &i, *ip2 = &j;
ipp = &ip1;

你会得到:

enter image description here

在上面的例子中,ipp是指向指针的指针。 ipp存储ip1的地址,ip1存储i的地址。

您可以查看Pointers to Pointers了解详情。

答案 1 :(得分:5)

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

  • *运算符将pointer to T类型的转换为T类型的变量
  • &运算符将T类型的变量转换为pointer to T类型的

所以当你有

int *ptr;

ptrpointer to int类型的变量。因此*ptrint类型的变量 - *指针转换为变量。你可以说*ptr = 123;

由于ptrpointer to int类型的变量,&ptr - 而不是变量 - 类型为pointer to pointer to int

int **pp = &ptr;

&ptrpointer to pointer to int类型的值。 pppointer to pointer to int类型的变量。 *pppointer to int类型的变量,实际上是与<{1}}相同的变量。 ptr*

有意义吗?

答案 2 :(得分:1)

有助于思考&#34;&amp;&#34;这条路。     int function_name(&amp;(whatever)); 你正在传递(无论如何)的地址。 无论有多少东西: 一个基本变量。 一个功能。 一个结构。 工会。 数组。 你应该在心理上翻译&#34;&amp;&#34;至  &#34;取&#34;的地址。所以你的例子意味着: 传递地址的COPY 类型为int的变量ptr的地址;

答案 3 :(得分:0)

Int *ptr;

&amp; ptr返回指针变量ptr的地址。简而言之,双指针或int **用p&amp; ptr。

保存ptr的地址