我必須要改變一個const結構實例的const成員在C.是否有可能在C中更改一個const struct成員?
我已經知道它是可以改變一個const類型基本如下:
const int a = 2;
*(int*)&a = 3;
我也可以改變一個const成員一個結構實例如下:
typedef struct ST {
const int a;
const int b;
}ST;
ST st = {.a = 1,.b =2};
int main() {
*(int *)(&((*(ST*)(&st)).a)) = 5; //works fine , no problem
}
但是我沒有成功,試圖改變結構實例的const成員,如果實例是不變的:
typedef struct ST {
const int a;
const int b;
}ST;
const ST st = {.a = 2,.b=3}; //const instance
int main() {
*(int *)(&((*(ST*)(&st)).a)) = 5; //does not work(Seg fault)!!
}
那麼,有可能在最後一種情況下更改「a」成員值嗎? 如果不是,爲什麼?
所有這些都是未定義的行爲 –
我想修改一個const成員。這是一個矛盾。你的設計需要改變。 –
另外,請打開所有警告。在第一種情況下,你的編譯器會抱怨將'const int *'強制轉換爲'int *'。 –