给指针赋值?

4

我在Dennis Ritchie身上找到了这个,

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 吗?


我有点困惑,因为我以为Ritchie不会犯错 :P - akash
2
也许Ritchie不会犯错,但排版人员可能会,特别是当文本不是用人类语言编写时。 - Sergey Kalinichenko
3个回答

1
绝对需要使用地址运算符,否则会出现编译时错误:编译器会报错
incompatible types when initializing typestruct rect *’ using typestruct rect’

1

是的,它肯定应该这样做,因为rp是指向struct rect的指针,而r的类型是struct rect。也许书中有错别字?


0

这是书中的一个笔误,已在后来的版本中进行了更正。

所涉及的书籍是Kernighan和Ritchie的{{link1:“C程序设计语言”,第2版}},通常称为“K&R2”。它通常不被称为“Ritchie”,因为他只是两位作者之一。(你们中的一些人可能会感兴趣知道,它现在可以作为Kindle电子书使用。)

该书的勘误列表如下:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接