gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 23:46:51 25 4
gpt4 key购买 nike

我试图通过常量指针访问结构元素。程序正常运行,但我收到警告“从不兼容的指针类型初始化”和“(‘B.settings 接近初始化)’”。我真的不知道如何正确初始化它。有人可以帮我解决这个问题吗?

这是我的代码:

这只是较大部分的一小部分。想法是在通过指向 const 结构的指针移动时访问结构变量 x,y。希望这是有道理的。

#include <stdio.h>
#define PGM_STR(X) ((const char[]) { X })

struct SettingsStruct
{
unsigned int x;
unsigned int y;

}Settings;

struct constitem
{
const char * const text;
const struct constitem *next;
const struct SettingsStruct * settings;
};

struct constitem const A;

struct constitem const B = {PGM_STR("x"), &A, &Settings.x };
struct constitem const A = {PGM_STR("y"), &B, &Settings.y };

static const struct constitem *currMenuPtr=&A;

void main()
{
Settings.x = 1;
Settings.y = 2;

printf("%s\n",currMenuPtr->text);
printf("%d\n",*(currMenuPtr->settings));

currMenuPtr = currMenuPtr->next;

printf("%s\n",currMenuPtr->text);
printf("%d\n",*(currMenuPtr->settings));
}

最佳答案

在您的代码中,Settings.x 是一个unsigned int,因此&Settings.x 是一个unsigned int *。您正在尝试使用它来初始化 const struct SettingsStruct * 类型的值。编译器提示是非常正确的——你所做的是非常值得怀疑的,我想可能不是你真正想做的。这同样适用于 Settings.y

看起来你可以通过将 struct constitem 的第三个元素的类型更改为 unsigned int * 来让编译器停止提示(关于那个)。不过,您必须判断这在您的程序的更大方案中是否真的适合您。

在变量 B 的初始化器中使用 &A 也存在问题,而 A 尚未在初始化器所在的位置声明出现。因为您还在 A 的初始化程序中引用了 B,所以您不能通过交换声明顺序来解决这个问题。如果你真的想要一个指针的循环链,那么指针值不能是 const,因为至少其中一个在初始化后需要修改。

关于指向常量结构中结构元素的常量指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30581779/

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