gpt4 book ai didi

c - 如何在 C(而不是 C++)中的结构中保存 const 值?

转载 作者:行者123 更新时间:2023-11-30 17:40:05 25 4
gpt4 key购买 nike

如何在结构中保存常量值?如果我将 const 放在 LEBEL0 处,我将无法将其分配给 LEBEL1 处。但如果我不在 LEBEL0 处放置 const,那么我将在 LEBEL1 处收到限定符丢失警告。有什么办法可以做到这一点吗?我想出了一个肮脏的解决方案(如下),但我认为可能有更好的解决方案......

    typedef struct _MyStruct
{
const SomePointerType pktData; <--LABEL0
}MyStruct;

const SomePointerType SomeFunctionICannotModify()
{

}

void SomeFunction()
{
MyStruct data;
….
data.pktData = SomeFunctionICannotModify(); <--LABEL1
....
SomeSubFunction(&data);
}

void SomeSubFunction(MyStruct* data)
{
this function does not modify any fields in "data".
}

PS:上面的代码是一个“模型”,而不是真正的代码,用于说明我的问题。它没有我实际程序中的所有代码。请不要问诸如“你为什么要这样做”、“你不必这样做”、“该代码无法编译”等问题。

我的肮脏解决方案

    typedef struct _ConstHolder
{
const SomePointerType pktData;
}ConstHolder;

typedef struct _MyStruct
{
ConstHolder holder;
}MyStruct;

void SomeFunction()
{
MyStruct data;
….
ConstHolder holder = {SomeFunctionICannotModify()};
data.holder = holder;
....
SomeSubFunction(&data);
}

最佳答案

你的问题很难理解,但你可能会误以为pktData分配后就不能修改。这不是真的。考虑以下完全合法的情况:

const char * str = "hello";
printf("%s\n", str);
str = "goodbye";
printf("%s\n", str);

const 并不是说​​您不能重新分配指针,而是说您不能更改它指向的数据。

关于c - 如何在 C(而不是 C++)中的结构中保存 const 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21617826/

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