我們在C的結構說在運行時如何從內存訪問C結構成員?
struct info{
int no;
char first_name[20];
char last_name[20];
char status;
}
在運行時,當我們試圖通過他們的名字來訪問這些成員,說info_var.no
或info_var.first_name
,或者我們用的指針結構,info_ptr->no
或info_ptr->first_name
,如何這些個人會員訪問?
我的意思是,該結構將被存儲,通過與一些必要的填充沿着成員成員,但如何運行或可能的編譯器,如果更換髮生在編譯的時候,他們的名字訪問這些個人會員?
我知道有很多是依賴於實現的,但如果任何人都可以扔在任何實現一些輕或只是給出一個概述這將是非常好的。
你的代碼假定對象是本地的,它可能不會在大多數情況下。因此,你的答案是錯誤的,特別是如果指針本身是一個全局變量。看到我的答案。 – Lindydancer 2012-01-09 10:39:12
@Lindydancer我懷疑這一點。在這個標準沒有說明的事情中,你不能說「這是錯誤的」。我可以編寫我自己的編譯器,它遵守標準並以我在這裏描述的方式訪問內存。沒有一條規則,我只是貼上了其中一個可能性。此代碼是由MSVC 2005在不帶優化的Win 32平臺下生成的。我指出它高度依賴於此。 – 2012-01-09 10:57:52
這是錯誤的,因爲你使一般性陳述「訪問指針或對象沒有區別」。在這種特殊情況下,它不會,但在更常見的情況下,結構是一個全局變量,肯定會產生影響。事實上,作爲一名編譯器開發人員,我認爲這是一個「常見問題」,我認爲教人們通常與生成的代碼有很大不同是非常重要的。 – Lindydancer 2012-01-09 11:03:49