Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Приоритет операций - разыменование * и инкремент ++

87K
15 апреля 2013 года
hexmonster
3 / / 28.03.2013
Здравствуйте... почему работает этот код?

#include "stdio.h"

int main()
{
char s[]="huh",*p=s;
while(*p)
printf("%c",*p++);

}

последняя строка меня интересует... выходит,что сначала указатель разыменовывается,затем отдельно сам указатель инкрементируется? Поплавило мне это мозг...
6.0K
15 апреля 2013 года
artyom-tyanutov
107 / / 10.07.2006
В данном случае

 
Код:
printf("%c",*p++);
будет эквивалентно

 
Код:
printf("%c",*p);
p++;
326
16 апреля 2013 года
sadovoya
757 / / 19.11.2005
Постфиксная форма инкремента позволяет сперва "нечто", после чего она стоит, использовать с текущим значением и лишь потом это "нечто" инкрементировать. В данном случае "нечто" - это указатель p. Его текущее значение сперва используется (а именно его разыменовывают) потом его-же инкрементируют (т.е. указатель а не разыменованное значение). С декрементом аналогично. Скоро привыкните :)
87K
16 апреля 2013 года
hexmonster
3 / / 28.03.2013
т.е. операции идут слева направо?
412
16 апреля 2013 года
grgdvo
323 / / 04.07.2007
Цитата: hexmonster
т.е. операции идут слева направо?


не обязательно.
просто у ++ приоритет меньше, чем у *
во избежание коллизий используйте всегда скобки.
громоздко, но точно понятно, что происходит

87K
17 апреля 2013 года
hexmonster
3 / / 28.03.2013
Цитата: grgdvo

просто у ++ приоритет меньше, чем у *



тут говорится об обратном
http://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B
Вы ссылаетесь на какой источник? Страуструп?

20K
17 апреля 2013 года
ellor!
198 / / 24.05.2012
Операции идут в порядке приоритета. И, как уже написали выше, в коде
 
Код:
printf("%c",*p++);
сначала используется текущее значение указателя, а потом оно инкрементируется.

И наоборот, в коде
 
Код:
printf("%c",*++p);
сначала значение указателя увеличивается, затем используется получившееся значение.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог