4

デニス・リッチーでこれを見つけた

struct rect r , *rp = r;

これらの 4 つの式は同等です。

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

演算子は左から右に関連付けられるためです。
struct rect *rp = &r ではないでしょうか?

4

3 に答える 3

1

絶対に - アドレス演算子が必要です。そうしないと、コンパイル時にエラーが発生します:

incompatible types when initializing type ‘struct rect *’ using type ‘struct rect’
于 2013-05-21T17:22:29.007 に答える
0

これは本のタイプミスであり、後の版で修正されています。

問題の本は、「The C Programming Language」、第 2 版、Kernighan と Ritchie によるもので、一般に「K&R2」と呼ばれています。リッチーは 2 人の著者のうちの 1 人にすぎないため、一般に「リッチー」と呼ばれることはありません。(Kindle 電子書籍として利用できるようになったことに興味がある人もいるかもしれません。)

本の正誤表には次のように書かれています。

1989 年 10 月の後の印刷では、131 ページ (§6.2)&で最後の例 ( struct rect r, *rp = &r;) に追加するマイナーな変更が行われ、208 ページ (§A.17) で、論理の説明で「等しい」を「等しくない」に変更しました。または、254 ページ (§B.8) で、automatics 変数の場合、宣言された変数のみが/シーケンスvolatileの後に最新の値に復元されることを明確にします。setjmplongjmp

(そして、「自動変数」というフレーズは「自動変数」であるべきです。)

于 2013-05-21T21:25:04.100 に答える