С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Igor Fender
1 / 1 / 0
Регистрация: 09.07.2014
Сообщений: 167
1

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

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

Здравствуйте!

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

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
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.05.2015, 13:44
Ответы с готовыми решениями:

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

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

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

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

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

2
hoggy
Заблокирован
Эксперт С++
04.05.2015, 13:48 2
C++
1
2
const int q = 6;            // <--- константа 
*(int*)&q =7;               // <--- изменение константы есть UB
UB - undefined behavior

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

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

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

считайте, что программу просто заглючило.
1
DrOffset
9015 / 4861 / 1197
Регистрация: 30.01.2014
Сообщений: 7,943
04.05.2015, 13:53 3
Igor Fender, игры с UB. Оптимизируя программу, компилятор закешировал константу 6. Он имеет право предполагать, что она не поменяется.
В итоге, в cout передается не переменная со стека q, а сразу 6.
Просто не делай так, это неправильно.
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.05.2015, 13:53

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

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

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


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

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

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