【问题标题】:Why am I not using '->' correctly? I know it is probably a simple conceptual mistake, but don't know why为什么我没有正确使用'->'?我知道这可能是一个简单的概念错误,但不知道为什么
【发布时间】:2013-09-29 18:01:43
【问题描述】:

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

从角度来看,我的项目中有 28 个错误; 26 个来自这个误解,两个来自一个在 C99 模式之外初始声明的 for 循环 - 这对我来说无关紧要,因为我必须将此代码转移到 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 中这个解引用器的理解在哪里不正确,以及为什么这些调用会像我期望的那样工作吗?我很困惑,我的谷歌/搜索技能在这件事上一无所获。感谢您的帮助。

这是我的粘贴箱: http://pastebin.com/ck8ThFLG

【问题讨论】:

  • 你没有任何指针。
  • 在我看来你有结构,而不是指向结构的指针。您可以使用“。”来尊重结构。不是“->”。例如 intro.endianness
  • 正如其他人所评论的,您使用的是本地结构,而不是指向该结构的指针。为了说明差异:struct tag the_tag; the_tag.tag_identifier = 0x10F; struct tag * tag_ptr = &the_tag; tag_ptr->tag_identifier = 0x10f;
  • @mkfs:这就是答案。

标签: c struct


【解决方案1】:

a->b 等价于(*a).b

由于introstruct header 类型,它的成员可以简单地通过. 访问,而-> 将需要intro_ptr 类型的intro_ptr 变量struct header*

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-21
    • 2019-08-09
    • 1970-01-01
    • 2020-05-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多