2013-05-21 5 views
4

В Dennis Ritchie я нашел это,Назначение значений указателям?

struct rect r , *rp = r; 

, то эти четыре выражения эквивалентны:

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

потому что операторы связывают слева направо.
Не должно быть структуры rect * rp = & r?

+0

Я запутался, потому что я думал, что Ритчи не может сделать ошибку: P – akash

+2

Возможно Ритчи не может совершить ошибку, но установщики типов могут, особенно когда текст не находится на человеческом языке. – dasblinkenlight

ответ

1

Да, это, безусловно, следует, как rp является указателем-to struct rect, в то время как r имеет тип struct rect. Может быть, опечатка в книге?

0

Это была опечатка в книге, и это было исправлено в более поздних изданиях.

Данная книга относится к "The C Programming Language", 2nd Edition, Kernighan и Ritchie, обычно называемым «K & R2». Его обычно не называют «Ричи», поскольку он был всего лишь одним из двух авторов. (. Некоторые из вас, возможно, будет интересно узнать, что это теперь доступно как Kindle электронной книги)

errata list для книги говорит:

Позже печати в октябре 1989 года внесла незначительные изменения в страница 131 (§6.2) добавить & к последнему примеру (struct rect r, *rp = &r;), на страница 208 (§A.17), чтобы изменить «равно» на «неравный» в описании логического ИЛИ и на странице 254 (§B.8), чтобы уточнить, что для переменных автоматизации только те, которые объявлены volatile, восстанавливаются до их последних значений после последовательности setjmp/longjmp.

(И да, фраза «автоматика переменных» должен быть «автоматической переменными».)

Смежные вопросы