[英]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.