gpt4 book ai didi

c - 初始化动态分配结构的 const 成员的正确方法

转载 作者:行者123 更新时间:2023-12-05 01:26:34 26 4
gpt4 key购买 nike

我有这两个结构:

struct Params {
int a;
int b;
};

struct Foo {
const struct Params settings;
int state;
};

settings 成员是常量,暗示一旦创建并初始化了 struct Foo 就不应更改它。

我想动态分配这个结构,例如

struct Foo * new_foo(void)
{
struct Foo *n = malloc(sizeof *n);
if (n) {
n->settings.a = SETTING_A;
n->settings.b = SETTING_B;
...
}

return n;
}

现在,由于设置是常量,这将无法编译。什么是正确的方法以这种方式初始化这样的结构?或者最好不要将设置成员声明为 const?

最佳答案

内存已分配(因此,不是常量),因此将 const 强制转换掉是合法的:

struct Foo * new_foo(void)
{
struct Foo *n = malloc(sizeof *n);
if (n) {
struct Params *s = (void *)&n->settings;
s->a = SETTING_A;
s->b = SETTING_B;
}
return n;
}

关于c - 初始化动态分配结构的 const 成员的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28150543/

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