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

int\ volatile int \ const int - C++

Восстановить пароль Регистрация
 
St-Voland
171 / 79 / 3
Регистрация: 05.12.2012
Сообщений: 217
29.12.2012, 16:57     int\ volatile int \ const int #1
Товарищи, паника! Имеется код:
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
Посмотрите здесь:

[Linker error] undefined reference to `sterling(int, int, int)' C++
C++ Написать функцию типа Beaty(int iA, int iB, int *pc)
C++ Преобразовать int в const int для установки размера массива
int const и const int в чем разница этих записей C++
C++ error: invalid operands of types 'const int*' and 'const int*' to binary 'operator+'
C++ int const * const foo(const int* param) const - разъясните значение квалификаторов
C++ [BCC32 Error] File1.cpp(74): E2285 Could not find a match for 'student1::student1(const char *,int,int)'
C++ Чем отличаются выражения (const int[]){value} от (const int[]){100}

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
diagon
Higher
 Аватар для diagon
1920 / 1186 / 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
Ответ Создать тему
Опции темы

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