,我有以下結構分配結構值:它是安全的使用指針
struct foo
{
int a;
char b;
};
它存儲到內存和指針,它可以是未對齊(奇地址)。
所以,這是安全的?:
const struct foo a = *((struct foo*)char_ptr);
我是令人擔憂的,因爲源結構的整數成員可以在奇地址。在一些系統中,從奇數地址讀取(多字節)整數會導致問題。
編輯: 爲了避免偏離主題的評論關於const
使用,我也從代碼中刪除const
。 (我從來沒有投常量指針到非const指針,即使在這種情況下它不應該引起任何問題)
而更多的問題背景: 這種結構是協議框架的一部分。它可以在框架內的任何偏移量。在真正的代碼中,該結構具有__attribute__((packed))
屬性。但是這可能不會改變答案?
無論如何,我可以使用memcopy
和非const a
來解決問題。但我想使用assingment,因爲它似乎是更優雅的方式(如果它是安全的)。
編譯器應該照顧它。如果一個變量可以正常訪問,它可以通過指針訪問。 –
@ User1 - 我會回到你的教科書並閱讀關鍵字'const' –
^^正確地指出...... LHS上的const不允許RHS上的變量。 – anishsane