我为什么不使用' - >'是否正确?我知道这可能是一个简单的概念错误,但不知道为什么

时间:2013-09-29 18:01:43

标签: c struct

对不起,我有点尴尬,我不得不问这个问题。我似乎无法发现为什么我使用 - >命令在C错误。我知道'x-> y'相当于'(* x).y',但由于某种原因,我在我的第一个项目中错误地使用它。

透视,我的项目中有28个错误; 26是来自这个误解,两个来自一个for循环,初始声明在C99模式之外 - 这对我来说无关紧要,因为我必须将这个代码转移到Unix机器上进行编译,所以这些错误赢得了'发生。

我得到的具体错误是:

C:\Users\Nick\Documents\School\CS449\Programs\Project 1\EXIF Viewer\main.c|78|error:invalid type argument of '->' (have 'struct tag')|

在26个错误中,每一个都是这样构造的,但有些人说(有'struct header'),而其他人说(有'struct tag')。

我将在本文的底部包含我的全部代码,但相关的结构声明和调用设置如下:

struct tag the_tag;//The reused tag

^这是一个全局结构变量

struct header intro; //Bytes 0-19 of the program

^这是int main中的本地结构头(argc,** argv){}

给我这些错误的一些行是:

56:  else if(intro->endianness[0] != 'I')
74:  if(the_tag->tag_identifier == (0x010F))
78:  printf("Manufacturer: %s\n", the_tag->data);
98:  else if(the_tag->tag_identifier == (0x08769))
125: else if(tagger->tag_identifier == 0x8827)

有人可以解释一下我对C中这个解除引用的理解是不正确的,以及为什么这些调用的工作方式与我期望的一样?我很困惑,我的谷歌/搜索技能在事件方面没有任何变化。谢谢你的帮助。

这是我的pastebin: http://pastebin.com/ck8ThFLG

1 个答案:

答案 0 :(得分:4)

a->b相当于(*a).b

由于intro的类型为struct header,因此只需使用.即可访问其成员,而->则需要intro_ptr类型为struct header*的变量。