gpt4 book ai didi

c - 是否可以更改 C 中的 const 结构成员?

转载 作者:行者123 更新时间:2023-12-04 09:37:20 26 4
gpt4 key购买 nike

我必须在 C 中更改 const 结构实例的 const 成员。

我已经知道可以按如下方式更改 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”成员值?
如果不是,为什么?

最佳答案

I already know it is possible to change a const basic type as follows:

const int a = 2;
*(int*)&a = 3;

您的编译器允许您这样做的事实并不使其合法。此代码调用未定义的行为,因此如果您在不同的平台上运行相同的程序或使用不同的编译器,它可能会失败或崩溃。
*(int *)(&((*(ST*)(&st)).a)) = 5; //works fine , no problem

这段代码有同样的问题:它调用了未定义的行为。
您尝试的最后一段代码也有(您猜对了!)未定义的行为。然而,这一次,程序崩溃而不是运行完成。

关于c - 是否可以更改 C 中的 const 结构成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44533784/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com