Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
1 / 1 / 0
Регистрация: 09.07.2014
Сообщений: 167
1

Косвенная модификация переменной - разобрать код

04.05.2015, 13:44. Показов 738. Ответов 2
Метки нет (Все метки)

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

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

C++
1
2
3
4
5
    const int q = 6;            // Создали константную переменную
    *(int*)&q =7;               // Засунули значение 7  по адресу q, приведенному к типу int
    cout << q << *(int*)&q; // Вывели, по сути, один и тот же участок памяти, но значения разные. ИЛИ НЕТ?
    *(int*)&q = q;              // По адресу, приведенному к int добавили занчение q
    cout << q << *(int*)&q; // Теперь все нормально
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.05.2015, 13:44
Ответы с готовыми решениями:

Модификация внутренней переменной лямбды
Добрый вечер, что-то помню, что-то всплывает перед глазами в качестве кода - но не могу...

Новичок. Прошу "бывалых" разобрать код подетально, код писал сам (рабочий)
Этот код моя первая самостоятельная работа. Писал его опираясь на уроки из интернета. Однако там...

Разобрать код на с++
Всем доброго времени суток. Не подскажите в чём у меня ошибка. В общем задание такое я должен...

Разобрать код
Помогите разобраться с кодом!Можите рассписать где что находится пожалуйста! #include &quot;stdafx.h&quot;...

2
Эксперт С++
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
04.05.2015, 13:48 2
C++
1
2
const int q = 6;            // <--- константа 
*(int*)&q =7;               // <--- изменение константы есть UB
UB - undefined behavior

в переводе на русский "поведение не определено".

нельзя изменять значение константы.

после этой строки никто вам ничего не гарантирует.
может произойти все что угодно.

считайте, что программу просто заглючило.
1
18834 / 9836 / 2405
Регистрация: 30.01.2014
Сообщений: 17,273
04.05.2015, 13:53 3
Igor Fender, игры с UB. Оптимизируя программу, компилятор закешировал константу 6. Он имеет право предполагать, что она не поменяется.
В итоге, в cout передается не переменная со стека q, а сразу 6.
Просто не делай так, это неправильно.
1
04.05.2015, 13:53
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.05.2015, 13:53
Помогаю со студенческими работами здесь

Разобрать код
Всем привет помогите разобрать код, программа создана для подсчета что вот это вот означает? ...

Разобрать код
В общем писал код для выявление слов в которых есть буква 'K', и вывод их на экран, все работает,...

Разобрать код с++
Всем доброго времени суток. Дело такое нужно разобрать код явных ошибок нету но при компиляции...

Разобрать код
Помогите пожулйста розобрать код програми struct node { int item; node* next; { item = x; next...


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

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