[英]What does ampersand “&” do in front of pointers?
在調用函數時,我經常在函數參數中看到指針前面的&符號。
例如
int *ptr;
randomFunction(&ptr);
我做了一些研究,發現這意味着該函數使用指針指針。 指針前面的&
符號是用來表示這個還是做其他事情?
&
是參考運算符,可以讀作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了解更多信息。
退后一步。 指針運算符的基本規則是:
*
操作者接通類型的值 pointer to T
成類型的變量 T
。 &
運算符將類型為T
的變量轉換為pointer to T
的類型pointer to T
的值 。 所以,當你有
int *ptr;
ptr
是pointer to int
的類型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
的類型pointer to pointer to int
的值。 pp
是pointer to pointer to int
的類型pointer to pointer to int
的變量。 *pp
是pointer to int
的類型pointer to int
的變量,實際上是與 ptr
相同的變量。 *
是&
的倒數 。
合理?
以這種方式思考“&”會有所幫助。 int function_name(&(whatever)); 你正在傳遞(無論如何)的地址。 無論是什么都可以:一個基本的變量。 一個功能。 一個結構。 工會。 數組。 你應該在心理上將“&”翻譯為“取地址”。 所以你的例子意味着:傳遞一個類型為int的變量ptr的地址的COPY!
Int *ptr;
&ptr返回指針變量ptr的地址。 簡而言之,雙指針或int **用&ptr保存ptr的地址。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.