Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.79/62: Рейтинг темы: голосов - 62, средняя оценка - 4.79
orangemouse

Секреты инкремента

04.08.2008, 06:48. Показов 12465. Ответов 32
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Пожалуйста!!! помогите! Умоляю!

i=5;
j=(++i) + (++i):
Чему равно j?;

пожалуйста обьясните как это решается, ну или просто ответ скаите???:huh:
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.08.2008, 06:48
Ответы с готовыми решениями:

Перегрузка инкремента ++
Не понимаю как вызвать перегрузку инкремента: void operator ++( int m ); в функции main,какой синтаксис. Я в main циклично ввожу числа и...

Сброс инкремента
Случайным образом выводятся числа в диапазоне от 0 до 100, при этом указывается ширина выборки, то есть количество выведенных на экран...

Перегрузка инкремента
Допустим, что некий класс имеет в наличии методы пре(и пост-)фиксного инкрементов. Date& Date::operator++(); Date...

32
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
04.08.2008, 16:16
Студворк — интернет-сервис помощи студентам
на счет приоритетов, вы не правы... они имеются в любом случае, а вообще такого рода записи - дурной тон программирования, ум за разум заходит... brainfack какой-то выходит, а не си
0
Эксперт С++
 Аватар для XuTPbIu_MuHTAu
2256 / 771 / 25
Регистрация: 27.05.2008
Сообщений: 1,496
04.08.2008, 17:07
Не нужно писать так только потому,что можно так писать. Нужно всегда точно знать,что делает код. Такие примеры хороши как задачи,но не дай бог увидеть
такое в своем рабочем коде...
0
 Аватар для Vialls
2 / 2 / 0
Регистрация: 02.08.2008
Сообщений: 40
04.08.2008, 17:53
Цитата Сообщение от XuTPbIu_MuHTAu Посмотреть сообщение
Не нужно писать так только потому,что можно так писать. Нужно всегда точно знать,что делает код. Такие примеры хороши как задачи,но не дай бог увидеть
такое в своем рабочем коде...
Поэтому надо сидеть и разбираться в этом, ибо это удобней И интересно
0
Эксперт С++
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
04.08.2008, 22:41
Цитата Сообщение от orangemouse Посмотреть сообщение
i=5;
j=(++i) + (++i):
Чему равно j?;
18. Или "Hello, World!". Или 256. Или - форматирование диска C:. Что больше понравится - выбирай на вкус.
Стандарт 5/4 говорит, что такой код приводит к неопределенному поведению (unspecified/undefined behavior) программы. Под "неопределенным поведением" же можно понимать все, что угодно, вплоть до форматирования жесткого диска, - Стандарт (1.3.12) не накладывает никаких ограничений.
И не нужно медитировать над компиляторами, приоритетами и прочим. Нет Стандарта, кроме Стандарта, и Страуструп - пророк его.
0
 Аватар для Spo1ler
296 / 56 / 5
Регистрация: 22.05.2008
Сообщений: 788
04.08.2008, 23:05
всё по порядочку
i==5
для начала выполняются действаия в скобках,
++i сначала инкрементит i, и только потом возвращает его, сразу после этого выполняется вторая скобка и мы имеем:
i==7;
j=i+i;
тоесть j=14
а уж в других языках просто приоритет не такой у операций(я ориентировался на приоритет C++)
0
2838 / 1647 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
05.08.2008, 12:04
Цитата Сообщение от Spo1ler Посмотреть сообщение
++i сначала инкрементит i, и только потом возвращает его
Нет, не так.
++i возвращает i+1, а в какой момент времени (не обязательно сразу) она то ли инкрементит саму i, то ли пишет в неё вычисленное значение, это не определено.
0
 Аватар для Vialls
2 / 2 / 0
Регистрация: 02.08.2008
Сообщений: 40
05.08.2008, 17:36
Работает все, как описал Spo1ler. Только значение в C++ не возвращается (не сохраняется в выражении), а просто перед началом вычисления выражения два раза инкремируется значение i и в итоге получается i+i (т.е. 7+7). В случае с постфиксным - инкремент происходит после вычисления выражения, и получается 10.

Добавлено через 5 часов 16 минут
Хех. Щас писал прогу, и понял в чем фишка в C#. В C# получается 14 в том случае, если инкремент заключен в скобки. То есть, когда он в скобках - значение сохраняется, когда нет - не сохраняется. Т.е. выражение "++i + ++i" вернет 13, когда "(++i) + (++i)" вернет 14.
0
21 / 20 / 0
Регистрация: 04.08.2008
Сообщений: 31
07.08.2008, 20:45
А меня интересует следующая запись:
q++ = p.

Что она означает? Переменной q присваивается значение p, затем она инкрементируется?
И что было бы если имела место запись ++q=p?

Добавлено через 2 минуты
Ещё вопрос. Если компиллятор доходит до какой то строки, то он читает её целиком, или двигается слева направо?
0
Эксперт С++
 Аватар для XuTPbIu_MuHTAu
2256 / 771 / 25
Регистрация: 27.05.2008
Сообщений: 1,496
07.08.2008, 20:47
Цитата Сообщение от Счастливчик Посмотреть сообщение
А меня интересует следующая запись:
q++ = p.
Эту запись не пропустит компилятор. С сообщением,что левый операнд оператора "=" должен быть "l-value" (c) MS studio. Таким кодом,ты пытаешься непойми чему присвоить p. Слева должен быть адрес переменной(вернее,переменная,у которой где-то есть адрес ) ,а фактически там находится то,что возвращает оператор ++.
0
21 / 20 / 0
Регистрация: 04.08.2008
Сообщений: 31
07.08.2008, 23:46
Цитата Сообщение от XuTPbIu_MuHTAu Посмотреть сообщение
Эту запись не пропустит компилятор. С сообщением,что левый операнд оператора "=" должен быть "l-value" (c) MS studio. Таким кодом,ты пытаешься непойми чему присвоить p. Слева должен быть адрес переменной(вернее,переменная,у которой где-то есть адрес ) ,а фактически там находится то,что возвращает оператор ++.
Я просто решил не усложнять запись(и сделал это от своего невежества). В книге по которой я занимаюсь, есть прога где определены следующие переменные
char *q и сhar *p, и инструкция *q++ = *p, если честно, я и не понял что она обозначает.
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
08.08.2008, 00:14
По адресу q записываем значение из взятое с адреса p. После чего смещаем указатель q инкрементом.
0
Of Wolf and Man
 Аватар для Xentar
999 / 198 / 5
Регистрация: 09.07.2008
Сообщений: 1,784
08.08.2008, 10:48
а если написать
Code
1
q+=p
то это будет
Code
1
q=q+p
вродь так
...потихоньку вспоминаю громкозабытый С
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
08.08.2008, 10:50
по-моему, тема себя исчерпала полностью, остальное - это домашнее задание для любознательных, будут новые открытия - пишите, а то тема превратилась в урок по программированию...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
08.08.2008, 10:50

Особенности инкремента
Здравствуйте!Возник вопрос касательно операции инкремента(++) допутим у нас есть код #include <iostream> int main() ...

Оператор перегрузки инкремента
Добрый день. Мне нужна оценка кода. Правильно - ли я все сделал? Подскажите пожалуйста. если что не так. /*Создать класс с перегрузкой...

Операторы инкремента и декремента
Создайте в классе Circle префиксный и постфиксный операторы инкремента и декремента, воздействующие только на член-данное радиус itsRadius.

Перегрузка операции инкремента
Как известно, постинкремент возвращает r-value, а преинкремент - l-value. То есть: ++(++x); // допустимо (x++)++; // ошибка...

Использование инкремента(Декремента)
Есть три кнопки и три индикатора(лампочки). Если нажимаю кнопку-1 тогда включается лампочка нажимаю еще раз выключается. Если по одному...


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

Или воспользуйтесь поиском по форуму:
33
Закрытая тема Создать тему
Новые блоги и статьи
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru