【问题标题】:Assigning values to pointers?给指针赋值?
【发布时间】:2013-05-16 13:34:54
【问题描述】:

在丹尼斯·里奇我发现了这个,

struct rect r , *rp = r;

那么这四个表达式是等价的:

  1. r.pt1.x
  2. rp->pt1.x
  3. (r.pt1).x
  4. (rp->pt1).x

因为运算符从左到右关联。
不应该是 struct rect *rp = &r 吗?

【问题讨论】:

  • 我很困惑,因为我认为里奇不会犯错:P
  • 也许 Ritchie 不会出错,但类型设置器可以,尤其是当文本不是人类语言时。

标签: c pointers struct structure kernighan-and-ritchie


【解决方案1】:

当然——地址运算符是必需的,otherwise you get a compile-time error:

incompatible types when initializing type ‘struct rect *’ using type ‘struct rect’

【讨论】:

    【解决方案2】:

    是的,它绝对应该,因为rp 是指向struct rect 的指针,而rstruct rect 类型。也许是书中的错字?

    【讨论】:

      【解决方案3】:

      这是书中的一个错字,已在以后的版本中更正。

      这本书是"The C Programming Language", 2nd Edition,作者 Kernighan 和 Ritchie,通常被称为“K&R2”。它通常不被称为“里奇”,因为他只是两位作者之一。 (你们中的一些人可能有兴趣知道它现在可以作为 Kindle 电子书获得。)

      这本书的errata list 说:

      后来在 1989 年 10 月印刷,对页面进行了细微改动 131(§6.2) 将 & 添加到最后一个示例 (struct rect r, *rp = &r;),在 第 208 页(§A.17)将描述中的“等于”更改为“不等于” 逻辑或,并在第 254 页(§B.8)阐明自动 变量,只有声明 volatile 的变量才会恢复到最新 setjmp / longjmp 序列之后的值。

      (是的,短语“自动变量”应该是“自动变量”。)

      【讨论】:

        猜你喜欢
        • 2011-10-10
        • 1970-01-01
        • 2017-08-20
        • 2013-07-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-02
        相关资源
        最近更新 更多