在我們的代碼中,我們有一個混合類型的大結構,並且希望存儲這些的默認值的重複(const)結構。這是否與void *指針一起工作?如果沒有,如何?
當用戶想要默認一個設置時,最好能夠通過在結構中獲取該項目的地址偏移量來完成此操作,然後在「默認值」中指定具有相同偏移量的值結構,有點像這樣:
void *setting = &settings->thing; // Points to a setting
int offset = setting - &settings;
void *default = &defaults_struct + offset; // Points to the default value
*setting = *default; // Set setting to default value
的想法是,如果設置 - >東西指向一個INT8,該INT8值從默認值複製,但如果設置 - > other_thing是一個Int32,全32位被複制。
問題是,這是否可以像上面描述的那樣使用void指針?如果沒有,有沒有辦法做到這一點?我錯過了實現這一目標的更好方法嗎?
編輯澄清:我們想要將結構中的單個值設置爲「defaults」結構中的相應值。
爲什麼不只是'settings-> thing = defaults_struct-> thing'? – interjay
你不能在void指針上做指針運算,也不能像這樣通過它複製任何東西。您需要使用'char *'並找出適當的長度來複制(並自己複製)。 – Mat
您應該使用'offsetof'宏來計算偏移量。 –