首頁  >  文章  >  後端開發  >  為什麼 C 中數組的位址等於指向其第一個元素的指標的位址?

為什麼 C 中數組的位址等於指向其第一個元素的指標的位址?

DDD
DDD原創
2024-11-22 08:08:10181瀏覽

Why is the address of an array in C equivalent to the address of a pointer to its first element?

理解陣列位址與轉換後的指標的等價

在C 程式語言中,將陣列轉換為使用陣列到指標轉換指向其第一個元素的指標。這就提出了一個問題,為什麼數組的位址與轉換後的指標的位址相同。

為了說明這個概念,讓我們考慮以下程式碼:

int t[10];

int *u = t;

cout << t << " " << &t << endl;
cout << u << " " << &u << endl;

輸出此程式碼示範了陣列位址和轉換後的指標位址的等效性:

0045FB88 0045FB88
0045FB88 0045FB7C

要理解這種現象,我們需要認識與符號t:

  • 陣列表達式: 單獨使用時,t 視為陣列表達式。在大多數情況下,包括輸出操作,此表達式會自動轉換為指向數組第一個元素的指標(即 &t[0])。
  • 指向陣列的指標: 當前面有& 運算符,t 被視為指向陣列本身的指標。此操作會產生整個陣列的位址,而不僅僅是其第一個元素的位址。

在我們的程式碼中,輸出的第一行顯示 t (陣列)的位址和 &t (指向陣列的指標)。由於數組是連續的記憶體區塊,因此它們的起始位址是相同的。

輸出的第二行顯示了 u (轉換後的指向第一個元素的指標)的位址和 &u (轉換後的指向第一個元素的指標)的位址指標)。同樣,這些位址是相同的,因為 u 本質上相當於 &t[0]。

因此,我們得出結論,數組的位址與轉換為指標的陣列的位址相同的原因是因為兩者都代表數組佔用的連續記憶體區塊的起始位址。這種等價性之所以成立,是因為數組到指針的轉換會產生一個指向數組第一個元素的指針,該元素與整個數組的開頭具有相同的內存位置。

以上是為什麼 C 中數組的位址等於指向其第一個元素的指標的位址?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn