在Dennis Ritchie,我找到了这个,
struct rect r , *rp = r;
然后这四个表达式是等价的:
r.pt1.x
rp->pt1.x
(r.pt1).x
(rp->pt1).x
因为运营商从左到右关联 不应该是struct rect * rp =& r?
答案 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
序列后的值。
(是的,短语“自动变量”应该是“自动变量”。)