Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






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)

 

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






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.