Как * p1-> p2 и * p1.a интерпретируются в c? - PullRequest
2 голосов
/ 06 июня 2011

Это кажется мне двусмысленным:

*p1->p2
    *(p1->p2) or (*p1)->p2

*p1.a
    *(p1.a) or (*p1).a

Как компилятор интерпретирует такие выражения?

Ответы [ 3 ]

12 голосов
/ 06 июня 2011

Это все до приоритет оператора ->, и . имеют более высокий приоритет, чем * (в этом контексте), поэтому два выражения эквивалентны:

*(p1->p2)
*(p1.a)
2 голосов
/ 06 июня 2011

Стрелка (->) и точка (.) имеют более высокий приоритет, чем оператор разыменования (*), поэтому она будет проанализирована как:

*(p1->p2)
*(p1.a)
0 голосов
/ 06 июня 2011

1) p1 - это указатель на структуру, которая содержит p2, а p2 - это указатель на то, что вы отменили.* (p1-> p2) 2) p1 - это переменная (не указатель) для структуры, которая содержит a, указатель, который вы отменяете.* (p1.a)

, подробнее см. C Приоритет и ассоциативность операторов

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...