这个错误意味着什么,有什么简单的解释吗?

request for member '*******' in something not a structure or union

在我学习C语言的这段时间里,我已经遇到过它好几次了,但我对它的意思一无所知.

推荐答案

如果您试图在有指针的情况下访问实例,也会发生这种情况,反之亦然:

struct foo
{
  int x, y, z;
};

struct foo a, *b = &a;

b.x = 12;  /* This will generate the error, should be b->x or (*b).x */

正如在 comments 中指出的,如果有人用typedef来表示指针,也就是说,在typedef中包含*,这可能会让人感到非常痛苦,比如:

typedef struct foo* Foo;

因为你会得到looks个代码,就像它在处理实例,而实际上它在处理指针:

Foo a_foo = get_a_brand_new_foo();
a_foo->field = FANTASTIC_VALUE;

注意上面的代码看起来好像应该写成a_foo.field,但是这会失败,因为Foo是一个指向struct的指针.我强烈推荐against,typedef:ED C中的指针.指针很重要,不要隐藏星号.让他们发光吧.

C++相关问答推荐

uintPtr_t上的算术

在CIL中运行时,sscanf返回0

如何在不修改字符串缓冲区早期使用的情况下覆盖字符串缓冲区

字符数组,字符指针,在一种情况下工作,但在另一种情况下不工作?

字符串令牌化xpath表达式

为什么GCC可以调用未定义的函数?

特定闪存扇区的内存别名

难以理解Makefile隐含规则

使用scanf在C中读取和存储文件中的值

N的值设置为0或1(未定义的行为),而我正在try 学习realloc和Malloc的用法

cairo 剪辑区域是否存在多个矩形?

初始成员、公共初始序列、匿名联合和严格别名如何在C中交互?

为什么电路板被循环删除?

*S=0;正在优化中.可能是GCC 13号虫?或者是一些不明确的行为?

为什么我在我的代码中得到错误和退出代码-1073741819(0xC0000005),但如果我添加了一个不相关的打印语句,它仍然有效?

当我将偏移量更改为任何非零值时,C中的mmap共享内存出现无效参数错误

我正在使用c学习数据 struct ,在学习堆栈时,我试图将中缀转换为后缀,并编写了这段代码.代码未给出输出

atoi函数最大长-长误差的再创造

为什么 Linux 共享库 .so 在内存中可能比在磁盘上大?

变量的指针右对齐,函数的指针左对齐