C 常量结构中指向结构元素的常量指针

C 常量结构中指向结构元素的常量指针,c,pointers,struct,constants,C,Pointers,Struct,Constants,我试图通过常量指针访问结构元素。程序的工作原理和它应该的一样,但我收到了警告“来自不兼容指针类型的初始化”和“(接近“B.settings”的初始化)”。我真的不知道如何正确初始化它。有人能帮我弄清楚吗 这是我的密码: 这只是大部分的一个片段。其思想是在通过指针移动到const结构时访问结构变量x,y。希望这是有意义的 #包括 #定义PGM_STR(X)((const char[]){X}) 结构设置结构 { 无符号整数x; 无符号整数y; }设置; 结构构造 { 常量字符*常量文本; con

我试图通过常量指针访问结构元素。程序的工作原理和它应该的一样,但我收到了警告“来自不兼容指针类型的初始化”和“(接近“B.settings”的初始化)”。我真的不知道如何正确初始化它。有人能帮我弄清楚吗

这是我的密码:

这只是大部分的一个片段。其思想是在通过指针移动到const结构时访问结构变量x,y。希望这是有意义的

#包括
#定义PGM_STR(X)((const char[]){X})
结构设置结构
{
无符号整数x;
无符号整数y;
}设置;
结构构造
{
常量字符*常量文本;
const struct constitem*next;
常量结构设置结构*设置;
};
结构组成常数A;
struct constem const B={PGM_STR(“x”),&A,&Settings.x};
struct constem const A={PGM_STR(“y”),&B,&Settings.y};
static const struct constitem*currenmenuptr=&A;
void main()
{
设置。x=1;
设置y=2;
printf(“%s\n”,currenmenuptr->text);
printf(“%d\n”,*(currenmenuptr->settings));
currenmenuptr=currenmenuptr->next;
printf(“%s\n”,currenmenuptr->text);
printf(“%d\n”,*(currenmenuptr->settings));

}
在代码中,
Settings.x
是一个
无符号整数
,因此
是一个
无符号整数*
。您正试图使用它初始化类型为
const struct settings struct*
的值。编译器的抱怨是对的——您所做的是非常值得怀疑的,我想可能不是您真正想要做的。这同样适用于
设置.y

通过将
struct constem
的第三个元素的类型更改为
unsigned int*
,似乎可以让编译器停止抱怨(关于这一点)。不过,你必须判断在你的计划中,这是否真的对你有效

a
尚未在初始值设定项出现的点声明时,在变量
B
的初始值设定项中使用
&a
也存在问题。由于您在
A
的初始值设定项中也引用了
B
,因此无法通过交换声明顺序来解决此问题。如果确实需要指针的循环链,那么指针值不能是常量,因为初始化后至少需要修改其中一个