为指针赋值?

时间:2013-05-21 17:19:31

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

在Dennis Ritchie,我找到了这个,

struct rect r , *rp = r;

然后这四个表达式是等价的:

  1. r.pt1.x
  2. rp->pt1.x
  3. (r.pt1).x
  4. (rp->pt1).x
  5. 因为运营商从左到右关联 不应该是struct rect * rp =& r?

3 个答案:

答案 0 :(得分:1)

是的,它绝对应该,因为rp是指向struct rect的指针,而r的类型为struct rect。也许书中有拼写错误?

答案 1 :(得分:1)

绝对 - 需要地址运算符otherwise you get a compile-time error

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

答案 2 :(得分:0)

这本书中有一个拼写错误,并且在以后的版本中已得到纠正。

有问题的书是"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)在说明中将“等于”改为“不等”   逻辑OR,和第254页(§B.8)澄清自动化   变量,只有那些声明为volatile的变量才会恢复到最新状态   setjmp / longjmp序列后的值。

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