Доброе время суток, kuper! Все очень просто... int a = 1; int p = ++a; // p = 2 А если int p = a++; // p = 1, a = 2 то есть в префиксной форме результатом является значение после увеличения. а в постфиксной - начальное значение, увеличение происходит позже. Ответ отправлен: 02.09.2002, 11:51 Отправитель: Dron Отвечает Сергей Коновалов
Здравствуйте, kuper! Отличие записи ++a от a++ заключается в том, что увеличение переменной на единицу происходит до того, как переменная непосредственно используется. Например (рассматриваем язык С): int a; a=5; printf("%d", ++a); В результате значение переменной сначала увеличивается на единицу (до шести), а затем выводится на экран. Если бы мы вместо ++a написали a++, то получили бы на экране цифру 5, хотя значение переменной уже равно шести. Это происходит потму, что переменная сначала использовалась в функции printf, и только потом её значение было увеличено. Ответ отправлен: 02.09.2002, 00:02 Отправитель: Сергей Коновалов Отвечает Yuri Gordienko
Добрый день, kuper! В данном контексте ничем, а вот в таком имеет значение int a,b; a = 0; b = a++; //b==0,a==1 (инкремент после) a = 0; b = ++a; //b==1,a==1 (инкремент до)
Ответ отправлен: 02.09.2002, 00:04 Отправитель: Yuri Gordienko Отвечает baldr
Доброе время суток, kuper! Различаются они таким образом: Если Вы пишете ++a, то такая форма записи называется "префиксной" - операция выполняется перед дальнейшим использованием переменной. То есть, сначала увеличиваем, а потом используем. Например, если мы передаем функции так: func(++a);, где a было равно, например, 5, то произойдет следующее: a будет равно 6, в функцию будет передано 6. Если же Вы используете ++a, то это - "постфиксная" форма записи. То есть, переменная сперва используется, а потом увеличивается. Например, в func(a++); где a=5, мы сначала передаем функции переменную a, которая равна 5, а потом увеличиваем a до 6. И, кстати, правильно говорить не инкрементация, а инкремент.
Ответ отправлен: 02.09.2002, 00:44 Отправитель: baldr Отвечает Vladimir
Добрый день, kuper! В первом случае переменная сначала увеличивается, потом обрабатывается. Во втором -- наоборот. Например: int b,a = 4; b = ++a; // результат 5 во втором случае b = a++; // b равно 4, но a равно 5
Ответ отправлен: 02.09.2002, 11:11 Отправитель: Vladimir Отвечает nix
Добрый день, kuper! Все очень просто for (a=1; a<3; a++) { ... }/*a увеличивается после проверки условия, т. е. цикл выполнится 2 раза*/ for (a=1; a<3; ++a) { ... }/*a увеличивается до проверки условия, т. е. цикл выполнится 1 раз*/ А вообще вот цитата из книги: "Если знак операции стоит перед операндом (префиксная форма записи), то изменение операнда происходит до его использования в выражении и результатом операции является увеличенное или уменьшенное значение операнда." ++ увеличение -- уменьшение Все;-) Ответ отправлен: 03.09.2002, 15:28 Отправитель: nix Отвечает kvINT
Здравствуйте, kuper! В данном примере ничем. Отличие появляется, если использовать эти инкременты, например, так: 1) преинкремент int a=1; cout << ++a; //напечатается 2 2) постинкремент int a=1; cout << a++; //напечатается 1, но в следующей строке a уже будет равен 2. Т.е отличие проявляется в сложных выражениях. Иногда это можно очень изящно использовать. Ответ отправлен: 02.09.2002, 14:22 Отправитель: kvINT Отвечает Sinner
Добрый день, kuper! В данном случае ничем. А в таком примере: int a,b; b=++a; //b=a+1, a=a+1 b=a++; //b=a, a=a+1 Достаточно ясно? Ответ отправлен: 03.09.2002, 08:22 Отправитель: Sinner
Форма отправки вопроса
Внимание!
Форма может работать некорректно в почтовых программах "Microsoft Outlook"
и "Microsoft Outlook Express". В программе The Bat!
подобные формы не работают вообще!
После нажатия на кнопку "Отправить", будет открыто второе окно. Заметьте,
что в некоторых браузерах могут стоять запреты на открытие других
окон, а также "чрезмерное" кэширование данных,
при этом факт отправки Вашего вопроса стоит под сомнением.
Мы рекомендуем открывать рассылку в программе Internet
Explorer 5.0+ или отправлять вопросы с сайта по адресу:
http://rusfaq.ru/cgi-bin/Message.cgi.