Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Int main()
{ int i = 7, j = 10; ++ i; j ++; cout < < i < < " \t" < < j < < endl; // На экран выведено 8 11 -- i; J --; cout < < i < < " \t" < < j < < endl; // На экран выведено 7 10
system(" Pause"); Return 0; }
Из примера видно, что разница между префиксной и постфиксной формами этих операций не чувствуется. Действительно в этом примере эти две формы работают одинаково. Немного изменим текст программы:
#include < iostream> using namespace std; Int main() { int i = 7, j = 10; cout < < ++ i < < " \t " < < j ++ < < endl; // На экран выведено 8 10 cout < < i < < " \t " < < j < < endl; // На экран выведено 8 11 cout < < -- i < < " \t " < < j -- < < endl; // На экран выведено 7 11 cout < < i < < " \t " < < j < < endl; // На экран выведено 7 10
system(" Pause"); Return 0; }
Разница между префиксной и постфиксной формами этих операций заключается в том, что при префиксной форме, переменная сначала меняет свое значение, а потом это измененное значение обрабатывается. В постфиксной форме значение переменной сначала обрабатывается и только потом ее значение изменяется на 1. В первом примере операторы ++ i; j ++; просто изменяют значения переменных i и j без какой-либо другой обработки и только после окончания работы этих операторов на экран выводятся эти измененные значения. Поэтому различие между префиксной и постфиксной формами не чувствуется. То же самое происходит и при выполнении операторов -- i; j--;. Во втором примере префиксные и постфиксные формы операций инкремента и декремента участвуют в выполнении оператора вывода данных на экран. Поэтому при выполнении префиксных операций сначала происходит изменение значений переменной i, потом эти измененные значения выводятся на экран, а при выполнении постфиксных операций сначала выводятся неизмененные значения переменной j, а уже после этого производятся изменения значения этой переменной. Еще пример: #include < iostream> using namespace std; Int main() { int i = 7, j = 10, k; k = (++ i) + (j --); // Или k = ++ i + j --; cout < < " k = " < < k < < endl; // k = 18 cout < < " i = " < < i < < endl; // i = 8 cout < < " j = " < < j < < endl; // j = 9
system(" Pause"); Return 0; }
А чему будет равно значение переменной k в этих случаях:
int i = 7, k; k = (i ++) + i;
Здесь k = 14. int i = 7, k; k = (++ i) + i;
Здесь k = 16.
int i = 7, k; k = i + (++ i);
Здесь k = 16. int i = 7, k; k = (++ i) + (++ i);
Здесь k = 18.
То есть сначала просматривается все выражение, при каждой встрече операции инкремента (декремента) в префиксной форме выполняется изменение на единицу переменной, а затем вычисляется выражение. А как интерпретировать такие выражения:
a+++b A---b
Эти выражения следует интерпретировать так:
(a++) + b (a--) - b
Но не так:
a + (++b) A - (--b)
Для более понятной записи текста программы в подобных случаях лучше использовать скобки.
|