2013-11-10 12 views
3

Мой вопрос не длинный, но для меня это озадачивает. Я один из тех людей, которые (и я думаю, это так по праву) хотят знать каждое правило на языках, которые они изучают. Я хочу знать, почему язык делает то, что он делает.Проблема с приоритетом и ++ и * унарные операторы в C

Итак, почему ++*i приращивание значения *i, а не указатель i? Оператор preincrement имеет более высокий приоритет, чем оператор косвенности. Это похоже на здравый смысл, но опять же, я должен точно знать, почему. Если хотите, укажите ссылки.

ответ

3

Префикс ++ имеет одинаковый приоритет, как одинарный * в то время как постфиксный ++ HSA высокий приоритет, чем одинарный * оператор.
В случае ++ *i компилятора интерпретирует его как

++ (*i); 

Это означает, что разыменования i, используйте его, увеличивают разыменованное значение без изменения значения указателя.

+0

В руководствах C часто указывается, что операторы постфикса и префикса имеют одинаковый приоритет, но ассоциативность делает его практически неактуальным в отношении того, кто прав, похоже. – Subsentient

5

Невозможно разобрать *(++i), не так ли?

Кстати, * и префикс ++ имеют одинаковый приоритет, и справа налево ассоциативность.

+0

Это имеет смысл. Я просто подтвердил, что у моего руководства есть опечатка, он говорит, что ++ выше, чем *. – Subsentient

+0

Postfix ++ (post-increment) выше, prefix ++ (pre-increment) - нет. – Inspired

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

  • Нет связанных вопросов^_^