Форум программистов, компьютерный форум, киберфорум
Наши страницы

int\ volatile int \ const int - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Динамическое увеличение размера динамического массива http://www.cyberforum.ru/cpp-beginners/thread749627.html
Никак не могу понять как это исправить.. Помогите, пожалуйста, разобраться в чём дело: struct myPoint { int x; int y; }; ...
C++ Дан массив целых чисел из 10 элементов.Все элементы кратные 10 заменить 0;Все нечетные элементы удвоить, а четные уменьшить на 2; Дан массив целых чисел из 50 элементов. Все элементы кратные 10 заменить 0; Все нечетные элементы удвоить, а четные уменьшить на 2; Как правильно заменить кратные 10 на 0? Заранее спасибо. ... http://www.cyberforum.ru/cpp-beginners/thread749624.html
Как добавить переход и возврат на другое фото? C++
Имеется фотографии, на одной 10 предметов, а на другой 9. И таких много, мне нужно сделать так что бы в случайном порядке появлялись те фотографии где 10 придметов(после чего через...
C++ шаблон для некоторых классов
идея, скорее всего, бредовая, но всё же уточнить нужно, вдруг так можно. У меня возникла такая ситуация: есть две идентичные функции. Единственное различие между ними это тип списка, передаваемого в...
C++ Как найти произведение цифр любого числа, которое ввел пользователь? http://www.cyberforum.ru/cpp-beginners/thread749587.html
Всем добрый день! Можете помочь мне написать код на с++ в visual studio. Смысл токов, пользователь вводит любое число(оно может быль хоть даже и до 10 знаков), и найти произведение его цифр....
C++ Как заставить компилятор не компилить неправильную программу? Мне не даёт покоя разговор с одним программистом, имевший место быть несколько лет назад. Тот сказал, что он так кодит, что у него неправильный код просто-напросто не компилится, а я не стал... подробнее

Показать сообщение отдельно
St-Voland
171 / 79 / 3
Регистрация: 05.12.2012
Сообщений: 217

int\ volatile int \ const int - C++

29.12.2012, 16:57. Просмотров 433. Ответов 2
Метки (Все метки)

Товарищи, паника! Имеется код:
C++
1
2
3
4
5
6
7
8
9
10
    int a = 5;
    std::cout << "Init value a: " << a << "\n";
    int *p;
    p = (int*) &a;
    *p = 0;
    std::cout << "*p = " << *p << "\n";
    std::cout << "New value a: " << a << "\n";
    std::cout << "p = " << p << "\n";
    std::cout << "Adress of a: " << &a << "\n";
    return 0;
Ну тут вроде все корректно и хорошо, нет претензий к работе. Начинаем дописывать что-то еще:

C++
1
2
3
4
5
6
7
8
9
10
    volatile int a = 5;
    std::cout << "Init value a: " << a << "\n";
    int *p;
    p = ( int* ) &a;
    *p = 0;
    std::cout << "*p = " << *p << "\n";
    std::cout << "New value a: " << a << "\n";
    std::cout << "p = " << p << "\n";
    std::cout << "Adress of a: " << &a << "\n";
    return 0;
По необъяснимым для меня причинам, адрес а = 1. Хотя как я понимаю, волатиль защищает от такой неявной замены. Думал, что проблема в том что р - не типа волатиль. Решил попробовать:

C++
1
2
3
4
5
6
7
8
9
10
    volatile int a = 5;
    std::cout << "Init value a: " << a << "\n";
    volatile int *p;
    p = ( volatile int* ) &a;
    *p = 0;
    std::cout << "*p = " << *p << "\n";
    std::cout << "New value a: " << a << "\n";
    std::cout << "p = " << p << "\n";
    std::cout << "Adress of a: " << &a << "\n";
    return 0;
Теперь р тоже равен 1.
Кажется уже понял, как и почему ведет себя программа при константной а( Прошу поправить если неправ ):
Когда мы пишем const a, программа не сверяет своего значения с а. Т.е. оно запомнило, что оно равно 5 и больше к нему не обращается. Т.е. оно его где-то запоминает. В таком случае назревает вопрос: Где?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru