首頁  >  文章  >  後端開發  >  C 中所有指標的大小都相同嗎?

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

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-10-31 00:14:30741瀏覽

 Are All Pointers the Same Size in C  ?

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

問題是 C 中的所有指標是否共用統一的大小。雖然人們經常認為,C 標準對這個問題提供了明確的見解。

C 標準規範

C 標準明確保證:

  • void 和char 大小相等([basic. compound]/5 部分)。
  • 指向同一類型的不同cv 限定版本的指標(T const, T易失性 和T const 易失性*) 共享相同的大小([basic.compound]/3 )。
  • 指向具有相同底層類型的枚舉類型的指針具有相同的大小([dcl.enum] 部分) /9).

實際注意事項

實際上,指向類別類型的指標通常保持相同的大小。這是因為編譯器必須在不完全定義 T 的情況下確定 T* 的大小。雖然編譯器在調整指標大小方面具有一定的靈活性,但在現實場景中很少使用。

此外,函數指標、指向資料成員的指標和指向函數成員的指標通常具有相同的大小。這允許在這些指標類型之間進行無縫的重新解釋轉換。

異常

分段架構中出現一個值得注意的異常,其中近指針和遠指針的大小可能不同。這種情況違反了指針大小統一的通常規則。

結論

C 標準闡明了 void* 和 cv 限定的指針具有統一的大小。雖然指向不同類型的指標通常繼承相同的大小,但實際考慮表明,指向類別類型的指標、函數指標和指向資料成員的指標都共享統一的大小。然而,分段架構存在一個例外,近指標和遠指標可能具有不同的大小。

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

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