Порядок операций с указателем - PullRequest
0 голосов
/ 01 октября 2019

При выполнении итерации, если у меня есть следующее:

while(*pstring)
    printf("%c", *pstring++);

Кажется, что все происходит в следующем порядке:

while(*pstring) {
    printf("%c", *pstring);
    pstring++;
}

Или, другими словами, так:

while(*pstring)
    printf("%c", *(pstring++));

Почему это не действует следующим образом:

while(*pstring)
    printf("%c", (*pstring)++);

1 Ответ

0 голосов
/ 01 октября 2019

В выражении *pstring++ вы используете то, что называется оператором постинкрементного (++ после имени переменной). Это «вычисляет» выражение сначала , а затем увеличивает его. Таким образом, в этом случае оператор * применяется к значению, на которое указывает pstring перед , и оно увеличивается.

Если, с другой стороны,стороны, вы использовали *++pstring, затем вы используете оператор с предварительным приращением : значение pstring будет увеличено до того, как будет использован его адресс помощью оператора *.

Попробуйте и посмотрите (но будьте осторожны, вы можете столкнуться с неопределенным поведением, когда выходите за пределы конца строки символов)!

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