【问题标题】:How do I get a const pointer to a const struct?如何获得指向 const 结构的 const 指针?
【发布时间】:2022-11-23 20:51:27
【问题描述】:

我喜欢在我的代码中创建场景,我在每个人都将共享的 .c 文件中声明一个静态全局结构,它包含配置内容。在声明的正下方,我将创建一个指向此结构的常量指针并将其放入 .h 文件中,以便每个人都可以访问它。

有时,在 .c 文件中,我喜欢有一个全局指针指向该 .c 文件关心的特定配置,这样我就不会一直引用全局结构,因为有时我会从中获取此配置不同项目的不同来源。

我遇到的问题是我无法定义这个“局部全局”指针,因为初始化元素不是常量。这是一个例子。

typedef struct
{
    int Value;
} mystruct_t, *pmystruct_t;

static const mystruct_t GlobalStruct;
const pmystruct_t pGlobalStruct = &GlobalStruct;

const int *ValuePtr = &pGlobalStruct->Value;

int main()
{
    *ValuePtr = 10;

    return 0;
}

我尝试阅读 C 中指针的 const 关键字,我想我理解了它,但显然它对我来说仍然是个谜。我试过的代码行,可能让我更接近那段要编译的代码是

const mystruct_t const *pGlobalStruct = &GlobalStruct;

但是,它仍然无法编译,因为 ValuePtr 初始值设定项元素不是常量(我得到的错误)。

这里的最终目标是让 ValuePtr 成为一个常量,没有人可以更改它指向的位置,但允许更改它指向的结构的元素。

编辑:我希望 ValuePtr 使用 pGlobalStruct

【问题讨论】:

    标签: c pointers struct constants


    【解决方案1】:
    struct str
    {
        int x;
        float b;
    };
    
    struct str a;
    const struct str b;
    const struct str *c;
    struct str * const d;
    const struct str * const e;
    
    
    • a - 不是 const 结构
    • b - const结构
    • c - 不是指向const结构的const指针
    • d - const指向非const结构的指针
    • e - const指向const结构的指针

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-10
      • 1970-01-01
      • 1970-01-01
      • 2016-02-18
      • 2017-05-15
      相关资源
      最近更新 更多