Буду признателен, если вы проясните это для меня. Вот два недавних вопроса с их принятыми ответами:
1) Что такое разница между *myptr++ и *(myptr++) в C
2) Еще одна последовательность точечный запрос: как работает *p++ = getchar()?
Принятый ответ на первый вопрос, краткий и простой для понимания, гласит, что, поскольку ++
имеет более высокий приоритет, чем *
, сначала выполняется приращение к указателю myptr
, а затем он разыменовывается. Я даже проверил это на компиляторе и проверил это.
Но принятый ответ на второй вопрос, опубликованный за несколько минут до этого, привел меня в замешательство.
В нем ясно сказано, что в *p++
разыменовывается строго старый адрес p
. У меня мало причин сомневаться в правильности ответа на второй вопрос с самым высоким рейтингом, но, честно говоря, я чувствую, что он противоречит ответу пользователя H2CO3
на первый вопрос. Итак, может ли кто-нибудь объяснить простым и понятным языком, что означает ответ на второй вопрос и как come *p++
разыменовывает старое значение p
во втором вопросе. Разве p
не должно увеличиваться первым, поскольку ++
имеет более высокий приоритет? Как, черт возьми, старый адрес может быть разыменован в *p++
Спасибо.
*myptr++
++
имеет более высокий приоритет, то разве не очевидно, чтоmyptr
будет сначала увеличиваться, а затем разыменовываться? - person Rüppell's Vulture   schedule 29.04.2013x++
не находится непосредственно между точками последовательности (скажем,2 + 3 + *p + x++
), вы не знаете, когда увеличиваетсяx
. Это может быть любое время между предыдущей точкой следования и следующей точкой следования, независимо от приоритета. Но вы все равно не сможете увидеть разницу, потому что запрещено писать или читать изx
в другом месте между одними и теми же точками последовательности. - person Pascal Cuoq   schedule 29.04.2013