簡體   English   中英

&符號“&”在指針前做了什么?

[英]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存儲的地址ip1ip1存儲的地址i

您可以查看Pointers to Pointers了解更多信息。

退后一步。 指針運算符的基本規則是:

  • *操作者接通類型的 pointer to T成類型的變量 T
  • &運算符將類型為T變量轉換為pointer to T的類型pointer to T

所以,當你有

int *ptr;

ptrpointer to int的類型pointer to int的變量。 因此*ptrint類型的變量 - *指針轉換為變量 你可以說*ptr = 123;

由於ptr是類型的變量pointer to int&ptr是一個 -不是一個可變-型的pointer to pointer to int

int **pp = &ptr;

&ptrpointer to pointer to int的類型pointer to pointer to int的值。 pppointer to pointer to int的類型pointer to pointer to int的變量。 *pppointer 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM