当调用函数时,我经常在函数参数中看到指针前面的&符号。
E.g。
int *ptr;
randomFunction(&ptr);
我做了一些研究,发现这意味着该函数使用指针指针。指针前面的&
符号是用来表示这个还是做其他事情?
答案 0 :(得分:26)
&
是引用运算符,可以读作address of
。在你的例子中,它将获得另一个指针,即指针给出的指针的地址,即指向指针的指针。
请看以下示例:
int **ipp;
int i = 5, j = 6, k = 7;
int *ip1 = &i, *ip2 = &j;
ipp = &ip1;
你会得到:
在上面的例子中,ipp
是指向指针的指针。 ipp
存储ip1
的地址,ip1
存储i
的地址。
您可以查看Pointers to Pointers了解详情。
答案 1 :(得分:5)
退后一步。指针运算符的基本规则是:
*
运算符将pointer to T
类型的值转换为T
类型的变量。&
运算符将T
类型的变量转换为pointer to T
类型的值。所以当你有
时int *ptr;
ptr
是pointer to int
类型的变量。因此*ptr
是int
类型的变量 - *
将指针转换为变量。你可以说*ptr = 123;
。
由于ptr
是pointer to int
类型的变量,&ptr
是值 - 而不是变量 - 类型为pointer to pointer to int
:
int **pp = &ptr;
&ptr
是pointer to pointer to int
类型的值。 pp
是pointer to pointer to int
类型的变量。 *pp
是pointer 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的地址