Приоритет операций - разыменование * и инкремент ++
#include "stdio.h"
int main()
{
char s[]="huh",*p=s;
while(*p)
printf("%c",*p++);
}
последняя строка меня интересует... выходит,что сначала указатель разыменовывается,затем отдельно сам указатель инкрементируется? Поплавило мне это мозг...
Код:
printf("%c",*p++);
Код:
printf("%c",*p);
p++;
p++;
Постфиксная форма инкремента позволяет сперва "нечто", после чего она стоит, использовать с текущим значением и лишь потом это "нечто" инкрементировать. В данном случае "нечто" - это указатель p. Его текущее значение сперва используется (а именно его разыменовывают) потом его-же инкрементируют (т.е. указатель а не разыменованное значение). С декрементом аналогично. Скоро привыкните :)
т.е. операции идут слева направо?
Цитата: hexmonster
т.е. операции идут слева направо?
не обязательно.
просто у ++ приоритет меньше, чем у *
во избежание коллизий используйте всегда скобки.
громоздко, но точно понятно, что происходит
Цитата: grgdvo
просто у ++ приоритет меньше, чем у *
тут говорится об обратном
http://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B
Вы ссылаетесь на какой источник? Страуструп?
Код:
printf("%c",*p++);
И наоборот, в коде
Код:
printf("%c",*++p);