Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Suslo
2 / 2 / 0
Регистрация: 30.11.2013
Сообщений: 80
Завершенные тесты: 1
#1

Указатели: почему так происходит? Постфиксный и префиксный инкремент - C++

07.05.2014, 16:17. Просмотров 485. Ответов 5
Метки нет (Все метки)

В общем, вот код программы
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
double q[10];
    for (int i(0);i<10;i++)
    {
        q[i]=i;
    }
    cout<<q<<endl;
    double* d=q;
    cout<<d<<" "<<&d<<endl<<"*d="<<*d<<endl;
    d++;
    cout<<"adress 0x"<<d<<" значение "<<*d<<" значение из массива "<<q[1]<<endl;
    double c;
    d++;
    (*d)++;
    cout<<*d<<" "<<q[2]<<endl;
    //39:50
    system("Pause");
интересна строка
C++
1
2
(*d)++;
    cout<<*d<<" "<<q[2]<<endl;
Выводит 3 и 3. Но, если я пытаюсь объединить эти две строки в одну, то есть
C++
1
cout<<(*d)++<<" "<<q[2]<<endl;
То получаю значения 2 и 3. Я понимаю, что разыменовывание и инкремент меняют значения массива. Вопрос заключается в том, почему он не выводит сразу "3 и 3", а выводит сначала именно "2", а затем "3"?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.05.2014, 16:17     Указатели: почему так происходит? Постфиксный и префиксный инкремент
Посмотрите здесь:

C++ постфиксный, и префиксный экземпляры оператора приращения в чем разница
C++ Потокобезопасен ли префиксный инкремент/декремент?
потоки почему так происходит ? C++
Префиксный и постфиксный инкремент C++
C++ Перегрузка оператора.Почему так происходит?
Постфиксный и префиксный декремент C++
C++ Как выполняется постфиксный и префиксный инкремент?
C++ постфиксный инкремент
Инкремент постфиксный и префиксный - принцип работы C++
C++ Суффиксальный и постфиксный инкремент/дикремент
C++ Указатель на постфиксный инкремент x
C++ Поясните как работает постфиксный и префиксный оператор на примере

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nmcf
4503 / 3841 / 1292
Регистрация: 14.04.2014
Сообщений: 15,066
07.05.2014, 16:21     Указатели: почему так происходит? Постфиксный и префиксный инкремент #2
Попробуй ++(*d)
cooller
 Аватар для cooller
564 / 532 / 120
Регистрация: 25.12.2013
Сообщений: 1,456
07.05.2014, 16:27     Указатели: почему так происходит? Постфиксный и префиксный инкремент #3
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Suslo Посмотреть сообщение
cout<<(*d)++<<" "<<q[2]<<endl;
потому что переменная инкрементируется после вывода на экран, если инкремент записать в префиксной форме, но сначала будет увеличение переменной, а затем вывод. То есть результат будет 3 3
Постфиксный инкремент означает что сначала над операндом будут выполнятся некие действия, и только затем будет задейстован оператор инкремента
В префиксной же форме все наоборот, сначала операнд увеличится, и только затем будут выполнятся действия над ним
Gygocopter
10 / 10 / 5
Регистрация: 05.02.2014
Сообщений: 124
07.05.2014, 16:28     Указатели: почему так происходит? Постфиксный и префиксный инкремент #4
если пост|инкремент (a++) используется в выводе, сначала выводится информация, потом происходит увеличение ++.
DrOffset
6817 / 4028 / 924
Регистрация: 30.01.2014
Сообщений: 6,847
07.05.2014, 17:25     Указатели: почему так происходит? Постфиксный и префиксный инкремент #5
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Gygocopter Посмотреть сообщение
если пост|инкремент (a++) используется в выводе, сначала выводится информация, потом происходит увеличение ++.
Нет, вывод в любом случае будет после инкремента.
Постфиксный инкремент отличается от префиксного тем, что значение увеличивается, но возвращается старое значение, т.е. значение до увеличения. Представь, что инкремент - это вот такая функция (псевдокод):
C++
1
2
3
4
5
6
int postinc(int & value)
{
    int tmp = value;
    value = value + 1;
    return tmp;
}
Тогда как префиксный инкремент выразился бы в такую функцию:
C++
1
2
3
4
5
int & preinc(int & value)
{
    value = value + 1;
    return value;
}
Gygocopter
10 / 10 / 5
Регистрация: 05.02.2014
Сообщений: 124
07.05.2014, 17:35     Указатели: почему так происходит? Постфиксный и префиксный инкремент #6
DrOffset, спасибо, запомним.
Yandex
Объявления
07.05.2014, 17:35     Указатели: почему так происходит? Постфиксный и префиксный инкремент
Ответ Создать тему
Опции темы

Текущее время: 14:26. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru