5 / 5 / 0
Регистрация: 27.08.2012
Сообщений: 153
1

Отличие постфиксной и префиксной формы декрементирования при работе с массивами

15.07.2013, 11:10. Показов 1306. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте.

Есть код, который работает(префиксная форма):

C
1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>
 
int main(void){
    int mas[10];
 
    mas[0] = 350;
    mas[1] = --mas[0];
    printf("%i", mas[1]);// Выводится 349. Все верно!
 
return 0;
}
Когда использую постфиксную форму, не получается(Выводит 350. А должно 349):

C
1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>
 
int main(void){
    int mas[10];
 
    mas[0] = 350;
    mas[1] = mas[0]--;
    printf("%i", mas[1]); // Не работает. Выводит 350. А должно 349.
 
return 0;
}
Откуда такие выводы?

Префиксное декрементирование происходит так:
1) mas[0] уменьшается на 1.
2) Уменьшенное значение заносится в mas[1].

Постфиксное декрементирование происходит так:
1) mas[1] присваивается значение mas[0], то есть 350.
2) Уменьшение присвоенного значения на 1

Что неправильно? Где я ошибаюсь?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.07.2013, 11:10
Ответы с готовыми решениями:

Перегрузка постфиксной и префиксной формы оператора ++
доброго времени суток форумчане, у меня такой вопрос, как перегрузить оператор ++ все другие...

Перегрузка постфиксной и префиксной операции инкремента
Здравствуйте! У меня возник вопрос: почему выводит разный результат, казалось бы, одинаковый код ...

Разница между префиксной и постфиксной формой записи счетчика цикла
Здравствуйте! Когда оформлял циклы всегда использовал такую запись: for(int i=0; i&lt;10;...

Написать программу, преобразующую строку в префиксной форме в строку в постфиксной форме
Помоги пожалуйста объяснить, что и как надо сделать в моей задаче: написать программу,...

5
233 / 223 / 146
Регистрация: 19.03.2012
Сообщений: 369
15.07.2013, 11:19 2
Посмотрите в таком варианте:
C
1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>
#include <conio.h>
int main(void){
    int mas[10];
 
    mas[0] = 350;
    mas[1] = mas[0]--;
    printf("%i  %i", mas[1],mas[0]); //Не работает. Выводит 350. А должно 349..
getch();
return 0;
}
ваш код работает абсолютно правильно mas[1]=350 , а mas[0]=349
C
1
mas[1] = mas[0]--;
сначала присваиваем mas[1] = mas[0], а потом mas[0] = mas[0]-1
1
5 / 5 / 0
Регистрация: 27.08.2012
Сообщений: 153
15.07.2013, 11:25  [ТС] 3
Valery__, Понятно. Я думал, что должен уменьшаться mas[1], а у меня выходит уменьшился mas[0].
0
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
15.07.2013, 14:39 4
Цитата Сообщение от VilDara Посмотреть сообщение
2) Уменьшение присвоенного значения на 1
Нет. Уменьшение не присвоенного значения, а значения в mas[0].
0
213 / 202 / 85
Регистрация: 09.05.2012
Сообщений: 494
18.07.2013, 01:20 5
Цитата Сообщение от VilDara Посмотреть сообщение
Я думал, что должен уменьшаться mas[1], а у меня выходит уменьшился mas[0].
с чего бы это уменьшатся mas[1], если оператор декремента применяется к mas[0].
0
Z3JheSBoYXQ=
342 / 237 / 83
Регистрация: 08.07.2012
Сообщений: 577
18.07.2013, 10:16 6
Цитата Сообщение от lowercase Посмотреть сообщение
с чего бы это уменьшатся mas[1], если оператор декремента применяется к mas[0].
[] имеют более высокий приоритет в сравнении с ++,--
0
18.07.2013, 10:16
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.07.2013, 10:16
Помогаю со студенческими работами здесь

Ошибка при работе с массивами
Здравствуйте. Хочу сделать программу, которая сортирует цифры. Вот код: #include &lt;iostream&gt; ...

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

Проблемма при работе с массивами структур
Разработать программу , позволяющую добавлять данные структур с указанными полями в массив,...

Использование показателей при работе с массивами
n натуральное, a1,...,an действительные числа. Найти : a1a2n+a2a2n-1+...+anan+1


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru