首頁 >後端開發 >C++ >C 中所有指標的大小都相同嗎? 令人驚訝的答案。

C 中所有指標的大小都相同嗎? 令人驚訝的答案。

Patricia Arquette
Patricia Arquette原創
2024-10-26 19:13:02997瀏覽

 Do All Pointers in C   Have the Same Size?  The Surprising Answer.

C 中所有指標的大小都相同嗎?

在世界上在C語言中,指標在管理記憶體和存取資料方面起著至關重要的作用。但它們都遵守相同的尺寸限制嗎?令人驚訝的是,答案既是肯定的,也是否定的。

C 標準的立場

雖然很容易假設所有指標由於其作為記憶體位址的固有性質而共享相同的大小,但C 標準明確描述了該假設成立的某些情況:


  1. void 與char ([ basic.compound]/5)
  2. T const、T volatile 和T const volatile 大小相同 與T 大小相同。這是因為相同類型的 cv 限定版本表現出佈局相容性,並且指向佈局相容類型的指標擁有等效的值表示 ([basic.compound]/3)。
  3. 同樣,指標具有相同底層類型的枚舉類型共用相同的大小 ([dcl.enum]/9)。

實際情況< ;/p>

實際上,指向類別類型的指標通常遵循相同的大小限制。原因在於標準要求即使類別類型不完整,仍然可以獲得其指標類型的大小。這對編譯器施加了限制,迫使它們在不完全了解類別的內部結構的情況下確定指標類型的大小。

雖然編譯器保留引入大小差異的彈性,例如根據類別前綴區分指針,這種做法在現實場景中並不常見。

在大多數情況下,以下大小等式在實務上也成立:


  • 指向函數類型的指標具有相同的大小。
  • 指向資料成員的指標具有相同的大小。
    指向函數成員的指標具有相同的大小。

這些相等性源自於重新解釋某些指標類型之間的轉換而不會遺失資訊的能力。雖然編譯器在技術上可以引入填充變化,但這樣做沒有實際的理由。

規則的例外

但是,在具有「近」和「遠」指標的分段架構中,您可能會遇到大小差異。這種與一般規則的背離是一個值得注意的例外。

總之,雖然 C 標準允許指針大小變化的可能性,但在實際應用中,大多數指針都符合相同的尺寸限制。這種一致性簡化了記憶體管理並增強了程式碼可讀性。

以上是C 中所有指標的大小都相同嗎? 令人驚訝的答案。的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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