gpt4 book ai didi

c - 'unary *' 的类型参数无效(有 'int' )。基本上我在指针和结构的逻辑上遇到了麻烦

转载 作者:行者123 更新时间:2023-11-30 18:00:44 25 4
gpt4 key购买 nike

我这里有这段代码,它给了我编译器错误,我知道这里还有许多其他问题,其标题基本上完全相同;我已经阅读了其中不少内容,但还没有回答我所有的问题。过去几天,我在 stackoverflow 和教学网站上读了很多关于指针和结构的内容,又是几十个,我觉得我只需要在我面前有一个物理示例来剖析和解释。我觉得我知道大部分这些东西,但我对自己的不确定性比我想要的还要多。如果有人可以帮助我了解发生了什么事。我在下面发布了一个编号列表,告诉您我认为正在发生的事情,并希望我在大多数情况下是对的,少解释一下您必须做的事情,哈哈,开玩笑。这是代码。

struct foo{
int num;
char *word;
struct foo *ptr;
};

void func1(struct foo*);
void func2(struct foo);

int main() {

struct foo a;
a.num = 20;
a.word = "wordOne";
func1(&a);
printf("%d %s", a.num, a.word); // refer to #3 below.

a.ptr = &a;
a.num = 55;
a.word = "thirdToLastWord";
func2(a);
printf("%d %s\n", a.num, a.word);
}

void func1(struct foo *a)
{
while(*(a->word) != '\0')
{
putchar(*(a->word));
a->word++;
}
putchar('\n');
if(a->num % 10 != 0)
{ a->num *= 2; }
a->word--;
printf("num equals %d\n", (*a).num);
}

void func2(struct foo a)
{
if((*a).num == a->ptr->num) //compiler error
{(*a).num = (*((*a).ptr)).num +1; } //compiler error
else { a->num = 200; }
a->word = "wordsix";
a->ptr->word = "wordseven";
printf("function 2 %d %s\n", (*a).num, (*((*a).ptr)).word);}
}

好的。所以我想我理解了第一个功能。但是,如果我错了或者我似乎对它为什么这样做有错误的理解,请纠正我以下的任何内容。

1) 在 main func1 将结构体“foo”声明为指针之前。当调用 func1 时,我们传入“a”的地址,这样我们就知道要指向哪个地址。

2) func1 中的所有内容都会更改原始结构。在 func1 外部打印时,该单词会递减,仅显示最后一个字母“e”。

3) 在我评论的 #3 行中,它打印出原始 struct foo 的 .num 而不是指针版本(即使它们是相同的东西)。

我希望到目前为止我还没有搞砸。

4) 好的,a.ptr = &a 将原始 foo 结构中的 struct var "struct foo *ptr"设置为等于 a 的地址;这恰好是指针“struct foo *ptr”所在的结构。对吗?

5) 我们将他称为(main/orig 结构)的成员,他已经被建立为 main 之上的指针。

6) 那么这是否会在结构内形成一个无限循环,这些结构通过自身内部的指针链接在一起?

我评论编译器错误的地方就是我确信我遇到问题的地方。

7) 首先,设置 a.ptr = &a; 后我们将带有初始化指针“ptr”的结构副本传递给函数 func2,是吗?

8) 在第一个 if stmt 中,我们似乎正在将 a->word 与 a->ptr->num 进行比较。我认为这意味着: IF { 属于“a”所指向的结构的成员“word”等于成员“num”,属于指针“ptr”所指向的结构并且“ptr 是再次被指针“a”指向}这似乎是正确的,但我认为不是......

9) 如果这是真的,那么下面的行表示完全相同的内容,并添加了 +1。

10) 我想最后 main 中的最后一个 printf 会打印出 num 和 word 在进入 func2 之前的内容,或者 func2 中的某些指针已更改其值。

我非常感谢您的所有反馈和建议,告诉我应该如何将这个指针 && 结构 ptr->member 和/或 Structure.member 的东西根植在我的脑海中。

另外,我不确定这是否出现在我的问题中,但我对双指针也相当不稳定。如果不是太麻烦,有人可以告诉我双指针如何将其自身集成到我的代码中吗?

谢谢

最佳答案

a 不是指针。您在很多情况下使用 -> 运算符访问非指针 struct 成员,这会导致错误。

您的代码中有很多错误。例如,您没有为 *word 分配内存。但在其中存储一个值:

a.word = "wordOne";

您应该将结构成员num作为a.num访问。

这是使用 pointers to structures 的教程这可能会帮助你理解它。

关于c - 'unary *' 的类型参数无效(有 'int' )。基本上我在指针和结构的逻辑上遇到了麻烦,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10264046/

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