Привет, ребята, после прохождения href = http://en.cppreference.com/w/c/language/operator_precedence эта ссылка, Я думал, что понял приоритет оператора, но я пришел к следующим сомнениям. Ссылка говорит, что При анализе выражения оператор, который указан в некоторой строке, будет привязан к его аргументам более жестко (как если бы они были скопированы), чем любой оператор, который указан ниже в строке. Например, выражение * p ++ анализируется как * (p ++), а не как (* p) ++.
Итак, как оценивается выражение ++ * p, это как ++ (* p), но если yes ++ имеет более высокий приоритет или привязанный, то *, то почему же в этой ситуации происходит более жесткое * и что о выражении * ++ p?Приоритет оператора Confusion
ответ
Оператор приоритет определяет, какой оператор следует применять сначала при наличии более одного выбора.
Из Вашей ссылки:
Старшинство и ассоциативность независимы от order of evaluation.
Выражение ++*p
или любое выражение вида:
{operator 2} {operator 1} {expression}
имеет четко определенный order of evaluation, где {operator 1} {expression}
должны быть применены для того, чтобы выражение, которое {operator 2}
может действовать на.
Да ++
имеет более высокий приоритет над *
, а ассоциативность для обоих - справа налево.
Так
++*p
будет оцениваться как ++(*p)
, потому что ++
должны быть применены на модифицируемые значения.
В то время как
*++p
, как вы видите, когда это оценивается оператор, близкий к p
является ++
, а также имеют более высокий приоритет над *
так ++p
будет происходить первым последующим разыменования *(++p)
Для '++ * p', как бы вы поместили круглые скобки другим способом? '++' обязательно должен применяться к '* p', а не' p', потому что он физически помещен слева от '* p', а не' p'. Когда вы пишете '1 + 2 * 3', вы не ожидаете, что 1 и 2 умножатся, даже если' * 'связывается более жестко, чем' + '. –
Отвечая на ваш второй вопрос, '* ++ p' эквивалентен' * (++ p) '. Здесь также нет никакой двусмысленности, которая потребует обращения к приоритету оператора для разрешения. –
'* ++ p' должен интерпретироваться как' * (++ p) 'потому что' (* ++) p' не имеет смысла - операнд '*' должен быть значением, а не оператор. –