Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на C / C++


Информационный Канал Subscribe.Ru


RusFAQ.ru: Программирование на C / C++

Выпуск № 072
от 04.09.2002, 22:00

Администратор:
Имя: Коробов Н.А.
URL: Информационный ресурс
ICQ: 365124
Украина, Днепропетровск
О рассылке:
Задано вопросов: 218
Отправлено ответов: 450
Активность: 206.4 %
[Задать вопрос >>][Регистрация эксперта >>]
[Поиск в базе]


 Список экспертов, ответы которых опубликованы в данном выпуске

Dron
Статус: Профессиональный
Общий рейтинг: 120.86
URL: Операционная система с нуля!
[Подробней >>]
Сергей Коновалов
Статус: Начальный
Общий рейтинг: 108
[Подробней >>]
Yuri Gordienko
Статус: Доверительный
Общий рейтинг: 130.18
[Подробней >>]
 
baldr
Статус: Профессиональный
Общий рейтинг: 117.32
URL: Сайт об ОС DOS. Всем, кто любит эту ОС!
[Подробней >>]
Vladimir
Статус: Опытный
Общий рейтинг: 113.68
Телефон: (08242) 43599 40099 раб 41255 дом
[Подробней >>]
nix
Статус: Опытный
Общий рейтинг: 111.7
[Подробней >>]
 
kvINT
Статус: Профессиональный
Общий рейтинг: 111.45
Телефон: (34316)2-31-45
[Подробней >>]
Sinner
Статус: Доверительный
Общий рейтинг: 105
[Подробней >>]


 Краткий перечень вопросов

Вопрос № 210. Здравствуйте эксперты! Чем отличается: int a; ++a;// эта инкрементация от a++;// этой инкрементации ... (ответов: 8)

Вопросов: 1, ответов: 8


 Вопрос № 210

Здравствуйте эксперты!
Чем отличается:
int a;
++a;// эта инкрементация от
a++;// этой инкрементации
Удачи...!



Вопрос отправлен: 01.09.2002, 21:53
Отправитель: kuper

[Следующий вопрос >>] [Список вопросов]

Отвечает Dron

Доброе время суток, 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.

© 2002 Команда RusFAQ.ru.

 Персональные данные

Ваше имя:

Ваш e-mail:

Опубликовать мой e-mail в рассылке


 Вопрос и дополнение

Ваш вопрос:


Приложение (если необходимо):


Получить ответов:


 Выбор рассылки

Программисту
Assembler (40)
C / C++ (31)
Perl (10)
Delphi (15)
Pascal (25)
Basic / VBA (10)
Java / JavaScript (12)
PHP (10)
MySQL / MSSQL (11)
Пользователю
Windows 95/98/Me (42)
Windows NT/2000/XP (29)
"Железо" (38)
Поиск информации (14)
Администратору
Windows NT/2000/XP (14)
Linux / Unix (16)
Юристу
Гражданское право (10)
Семейное право (7)
Трудовое право (9)
КоАП (5)

Отправить вопрос всем экспертам выбранной рассылки.




be number one Яндекс цитирования

© 2002 Россия, Москва. Авторское право: RusFAQ.ru

http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное