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

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

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

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

07.05.2014, 16:17. Просмотров 528. Ответов 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++
#include &lt;iostream&gt; using namespace std; int main() { int c=0; cout&lt;&lt;с++&lt;&lt;++с&lt;&lt;++с&lt;&lt;с++&lt;&lt;endl; return 0; ...

Инкремент постфиксный и префиксный - принцип работы - C++
Hello World! Нужна ваша помощь, мозг отказывается понимать :wall:! Набрал код: #include &lt;iostream&gt; using namespace std; int...

Как выполняется постфиксный и префиксный инкремент? - C++
Растолкуйте! Обычно, а = с++ толкуется как а = с+1 тогда а = ++с есть а = 1+с Если использовать последнюю запись (а = 1+с),верно...

Постфиксный и префиксный декремент - C++
#include &lt;iostream&gt; using std::cout; int main() { int a=5; cout &lt;&lt; (--a)-- &lt;&lt; &quot; &quot;; cout &lt;&lt; a &lt;&lt; &quot; &quot;; cout &lt;&lt; (--a)-- &lt;&lt;...

Постфиксный, и префиксный экземпляры оператора приращения: в чем разница? - C++
постфиксный, и префиксный экземпляры оператора приращения в чем разница? i++ ++i ??

Поясните как работает постфиксный и префиксный оператор на примере - C++
Здравствуйте. Здесь префиксный понятно, а что если изменить на постфиксный, как код будет работать? vector&lt;int&gt;::size_type...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nmcf
5276 / 4596 / 1541
Регистрация: 14.04.2014
Сообщений: 18,260
07.05.2014, 16:21     Указатели: почему так происходит? Постфиксный и префиксный инкремент #2
Попробуй ++(*d)
cooller
565 / 533 / 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
7060 / 4201 / 949
Регистрация: 30.01.2014
Сообщений: 6,968
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;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.05.2014, 17:35     Указатели: почему так происходит? Постфиксный и префиксный инкремент
Еще ссылки по теме:

Потокобезопасен ли префиксный инкремент/декремент? - C++
Потокобезопасен ли префиксный инкремент/декремент? Например такой код: // Объявляем глобальную переменную uint64_t i=0; // Тут...

постфиксный инкремент - C++
class Inkrement { Inkrement(){}; Inkrement &amp;operator++(int) { Inkrement temp = *this; ++*this; return temp; ...

Указатель на постфиксный инкремент x - C++
Почему так нельзя делать? int *p = &amp;(x++); Вроде же все ясно должно быть компилятору

Суффиксальный и постфиксный инкремент/дикремент - C++
Числа везде равны. Такой вопрос: Сначала с обоих сторон в скобках выполняется суффиксальный и постфиксный инкремент/дикремент и потом уже...

потоки почему так происходит ? - C++
Господа делаю воспроизведение основной музыки в программе , а затем в отдельный поток делаю воспроизвеление другого звука , так вот звук...

Перегрузка оператора.Почему так происходит? - C++
У нас есть перегрузка оператора. Digit operator-(const Digit &amp;N) { Digit temp; temp.dig=dig-N.dig; return temp; } ...


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

Или воспользуйтесь поиском по форуму:
Gygocopter
10 / 10 / 5
Регистрация: 05.02.2014
Сообщений: 124
07.05.2014, 17:35     Указатели: почему так происходит? Постфиксный и префиксный инкремент #6
DrOffset, спасибо, запомним.
Yandex
Объявления
07.05.2014, 17:35     Указатели: почему так происходит? Постфиксный и префиксный инкремент
Ответ Создать тему
Опции темы

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