我需要在C语言中更改一个const结构体实例的const成员。
我已经知道可以按照以下方式更改const基本类型:
我也可以按照以下方式更改结构实例的常量成员:
然而,如果结构体实例是常量,我尝试更改其常量成员却没有成功:
那么,在这种情况下更改“a”成员的值是否可能?如果不行,为什么?
我已经知道可以按照以下方式更改const基本类型:
const int a = 2;
*(int*)&a = 3;
我也可以按照以下方式更改结构实例的常量成员:
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
}
然而,如果结构体实例是常量,我尝试更改其常量成员却没有成功:
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”成员的值是否可能?如果不行,为什么?