簡體   English   中英

接下來的struct _node *的內存布局之間是否有區別? 和struct *接下來; 在32位x86或AMD上?

[英]Is there a difference between memory layout of struct _node* next; and struct* next; on 32bit x86 or amd?

我正在學習C struct {}的內存布局; 並想知道包含指向該結構的指針變量的結構的內存布局如何,例如:

typedef struct _node{ int data; struct _node* next;} node_t;

…在為結構體的指針變量放置內存方面的區別,…

不,結構指針在內存中的表示方式沒有區別。 根據C 2018 6.2.5 28:

所有指向結構類型的指針應具有相同的表示和對齊要求。

有一些注意事項。 這並不意味着您可以自由地將指針轉換為一種類型的結構,並將其用作指向另一種類型的結構的指針。 腳注告訴我們:

相同的表示形式和對齊要求意在暗示作為函數的參數,函數的返回值和並集成員的可互換性。

本質上,這允許您執行的操作是暫時將指針轉換為來回結構—只要使用它引用結構的成員時,它就已轉換回其原始類型。 本質上,任何結構指針都可以是任何其他結構指針的臨時持有人。

您可以使用指向結構的指針執行其他一些操作。 一個特殊的規則說,指向適當轉換的結構的指針指向其第一個成員,反之亦然(6.7.2.1 15)。 因此,如果結構的第一個成員也是結構,則可以將一種結構類型的指針轉​​換為另一種結構類型的指針,並使用它來訪問成員。 但是,那是相當罕見的情況。

在很大程度上,我希望有關具有相同表示和對齊要求的結構的所有指針的規則是,在聲明結構(如struct foo;使編譯器知道該結構)但尚未定義(使struct foo;知道)時,使事情正常工作告訴編譯器里面有什么。 到目前為止,我們在源代碼中僅了解結構的存在,而不是結構中的內容時,我們希望能夠聲明和定義結構的指針。 如果指向一個結構的指針的表示根據其中的內容而有所不同,那么在裸露struct foo;之后,編譯器對指針的含義將有不同的看法struct foo; 而不是完整的結構定義。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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