我必须要改变一个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 *'。 –