我喜欢在我的代码中创建这样的场景:我在一个.c文件中声明一个静态全局结构体,每个人都可以共享它,它包含配置信息。在声明的正下方,我将创建一个指向该结构体的常量指针,并将其放在.h文件中,以便每个人都可以访问它。
有时候,在一个.c文件中,我希望有一个指向该.c文件所关心的特定配置的全局指针,这样我就不必不断地引用全局结构体,因为有时候我会从不同项目的不同源中获取此配置。
我遇到的问题是我不能定义这个“local global”指针,因为初始化器元素不是常量。
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
2条答案
按热度按时间hgqdbh6s1#
定义
使变数(指标本身)
pGlobalStruct
成为常数,而不是它所指向的结构。这只是将指针隐藏在类型别名后面的众多缺陷中的 * 一个 *。
要使
ValuePtr
的定义也有效,则需要使指针变量以及它所指向的结构都为常量:现在
pGlobalStruct
是指向常量mystruct_t
对象的常量指针。sulc1iza2#
不要隐藏
typedef
后面的指针。如果您的指针正在引用常量对象,则不能为其赋值。您只能初始化该对象。
如何获得指向const结构体的const指针?以下是所有可能的组合:
a
-不是const
结构b
-const
结构c
-不是指向const
结构的const
指针d
-const
指向非const
结构的指针const
结构的指针就你而言