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

Как понять указатель константы? - C++

Восстановить пароль Регистрация
 
shynarG
0 / 0 / 0
Регистрация: 18.05.2012
Сообщений: 8
12.09.2015, 09:23     Как понять указатель константы? #1
Добрый день! Почему *intarray++ не допускается. Если она константа/указатель константы (по лафоре) почему рядом в объявлении нет спецификатора const? Т.е. intarray - адрес в памяти, который хранится до окончания работы программы (по лафоре). Однако он не объявлен как static или глобальная переменная, а если массив будет объявлен внутри блока (функции, цикла и т.д.), то он будет хранится до окончания работы блока. Подскажите пожалуйста как понять?

C++
1
2
3
4
5
6
7
8
int main ()
{
    int intarray [] = {31,54,77,52,93};
    int * ptrint;
    ptrint = intarray;
 
    cout <<*ptrint++<<" - "<< *intarray++<<endl;    
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.09.2015, 09:23     Как понять указатель константы?
Посмотрите здесь:

Как передать параметр типа "указатель на указатель" в функцию? C++
указатель на указатель или присваивание объекта C++
Что значит константный указатель на объект, указатель на константный объект, и как это можно использовать? C++
C++ Как правильно объявить константы для всего проекта, который состоит из нескольких файлов
C++ Не могу понять, как правильно передать указатель на объект в файл
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nmcf
4316 / 3737 / 1260
Регистрация: 14.04.2014
Сообщений: 14,664
12.09.2015, 09:50     Как понять указатель константы? #2
Особенность массива.
Kerry_Jr
Модератор
 Аватар для Kerry_Jr
1868 / 1664 / 580
Регистрация: 14.05.2014
Сообщений: 4,774
Записей в блоге: 1
Завершенные тесты: 5
12.09.2015, 09:56     Как понять указатель константы? #3
Цитата Сообщение от shynarG Посмотреть сообщение
Т.е. intarray - адрес в памяти, который хранится до окончания работы программы (по лафоре)
Цитата Сообщение от shynarG Посмотреть сообщение
а если массив будет объявлен внутри блока (функции, цикла и т.д.), то он будет хранится до окончания работы блока
А теперь смотрите какая простая штука: массив объявлен внутри функции main, а работа программы начинается с вызова функции main и завершается по окончании работы main.
Ferrari F1
Заблокирован
415 / 289 / 63
Регистрация: 27.01.2015
Сообщений: 1,929
Записей в блоге: 1
Завершенные тесты: 1
12.09.2015, 12:34     Как понять указатель константы? #4
shynarG, с динамическими массивами знаком? если да, то по поведению его можно сделать схожим с обычным массивом определенного размера.
C++
1
2
3
4
5
int intarray1[5];
int* const intarray2 = new int[5]; // создаем так называемый "константый указатель"
// указатель ни того, ни другого не сместить
// а в этой ситуации запросто
int* intarray3 = new int[5]; //можно потом написать intarray3++
Добавлено через 9 минут
и кстати, не слудует путать:
C++
1
2
int* const intarray2 = new int[5]; // константный указатель
int const* intarray2 = new int[5]; // указатель на константу
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16837 / 5258 / 323
Регистрация: 30.03.2009
Сообщений: 14,156
Записей в блоге: 26
12.09.2015, 12:43     Как понять указатель константы? #5
Цитата Сообщение от shynarG Посмотреть сообщение
Почему *intarray++ не допускается
Имя массива в выражениях трактуется не как переменная-массив, а как адрес самого первого элемента (т.е. немодифицируемое значение) - Ошибка Lvalue required
Yandex
Объявления
12.09.2015, 12:43     Как понять указатель константы?
Ответ Создать тему
Опции темы

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