Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
St-Voland
171 / 79 / 3
Регистрация: 05.12.2012
Сообщений: 217
#1

int\ volatile int \ const int - C++

29.12.2012, 16:57. Просмотров 404. Ответов 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 и больше к нему не обращается. Т.е. оно его где-то запоминает. В таком случае назревает вопрос: Где?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.12.2012, 16:57     int\ volatile int \ const int
Посмотрите здесь:

C++ Ошибка - перегруженность pow(int,int) неосуществима. Как исправить?
error C2440:невозможно преобразовать 'int' в 'int []' C++
C++ error C2664: itoa: невозможно преобразовать параметр 1 из 'int *' в 'int' + запись в файл
C++ [Linker Error] Unresolved external 'Sort(int, int)' referenced from H:\INFORMATIC\5\UNIT1.OBJ
C++ Написать функцию SUM (int M, int N) / С++ для начинающих
Int* const или const int*? C++
в Visual Studio пишет: отсутствует спецификатор типа-предполагается int.C++ не поддерживает int по умолчанию C++
Что означает int pos = 0; int value = 5; в данном коде? C++
C++ Что это такое int (*func4 (void)(int)
Error C4430: missing type specifier - int assumed. Note: C++ does not support default-int C++
С++ ошибка error C4430: missing type specifier - int assumed. Note: C++ does not support default-int C++
C++ Правильное объявление переменной с точки зрения стиля [int *a vs int* a]

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
diagon
Higher
1924 / 1190 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
29.12.2012, 17:02     int\ volatile int \ const int #2
Проблема в выводе. Почитайте: [Задача] const volatile
St-Voland
171 / 79 / 3
Регистрация: 05.12.2012
Сообщений: 217
29.12.2012, 17:07  [ТС]     int\ volatile int \ const int #3
Спасибо, это надо запомнить По поводу конста еще непонятно, но это уже мелочи))
Yandex
Объявления
29.12.2012, 17:07     int\ volatile int \ const int
Ответ Создать тему
Опции темы

Текущее время: 01:45. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru