11. Не понятно, как работает оператор ++ или --, особенно при его применении к указателям. |
Автор ARV | ||||
18.12.2009 г. | ||||
Оператор ++ или -- может быть префиксным и постфиксным, т.е. может стоять слева от переменной или справа от нее. В первом случае значение переменной изменяется до его использования в выражении, во втором - после использования. int a = 2, x = 3, y; Сравните результаты первого и последнего выражений: y имеет разные значения, хотя исходные условия одинаковые! Так происходит потому, что в первом случае при умножении на x используется значение переменной a еще до инкремента, а во втором случае - уже после инкремента. В связи с такой особенностью крайне нежелательно использовать в одном операторе несколько операторов ++ или -- с одной и той же переменной, т.к. порядок вычисления в этом случае не определен стандартом языка Си - вы получите об этом предупреждение компилятора или даже сообщение об ошибке: y = a++ * x - a++ / 2; // так делать нельзя! Что касается указателей, то тут надо разделять случай инкремента (или декремента) самого указателя и значения по указателю. int *ptr; Если вы сомневаетесь - используйте скобки, чтобы однозначно определить порядок вычислений (иногда без скобок вообще не обойтись - компилятор не поймет): (*ptr)++; // тут ясно, что изменяется значение по указателю Добавить в любимые (0) | Просмотров: 7130
Только зарегистрированные пользователи могут оставлять коментарии. |
« Пред. | След. » |
---|