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

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

Войти
Регистрация
Восстановить пароль
 
Max64
20 / 20 / 5
Регистрация: 27.10.2012
Сообщений: 156
#1

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

27.10.2012, 14:14. Просмотров 543. Ответов 4
Метки нет (Все метки)

Почему в данном примере константный указатель может быть использован для вывода элементов вектора?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <vector>
 
int main()  {
    std::vector<int> v;
    std::vector<int>::pointer p;
    std::vector<int>::const_pointer cp;
    v.reserve(10);          // Резервируем минимальный размер
    for (int i=1; i<=10; ++i) v.push_back(i);
    p = v.data();           // Сохраняем обычный указатель
    *p = 800;               // Изменяем значение первого элемента
    cp = v.data();          // Сохраняем константный указатель
    for (int j=0, c=v.size(); j<c; ++j, ++cp)  {
        std::cout << *cp << " ";
    }       // 800 2 3 4 5 6 7 8 9 10
    std::cout << std::endl;
    std::cin.get();
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.10.2012, 14:14
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Константный указатель (C++):

Что значит константный указатель на объект, указатель на константный объект, и как это можно использовать? - C++
Подскажите, что значит константный указатель на объект, указатель на константный объект, и как это можно использовать??

Константный указатель - C++
Здравствуйте! Имею класс - MyClass. Константный указатель на него: const MyClass *pMyClass; Но в программе я присваиваю далее...

константный метод и указатель this - C++
class CBox { double Length; double Height; double Width; public: CBox(double a, double b, double c=1): Length(a),...

Константный указатель на целое - C++
Начал осваивать С++ по книжке Страуструпа, одно из первых заданий: напишите описание константного указателя на целое. Как я это делаю: ...

Неконстантный указатель на константный объект - C++
Добрый день, объясните пожалуйста, вот это: const int ival = 1024; int *const &amp;piref = &amp;ival; Типа мы создали дополнительное имя...

Константная переменная и константный указатель - C++
В чем разница : int const а; const int a; С указателями такое видел, с переменными нет.

4
Герц
524 / 341 / 4
Регистрация: 05.11.2010
Сообщений: 1,077
Записей в блоге: 1
27.10.2012, 14:19 #2
Почему нет? :-)
0
Max64
20 / 20 / 5
Регистрация: 27.10.2012
Сообщений: 156
27.10.2012, 14:23  [ТС] #3
Т.е. здесь в цикле изменяется адрес указателя, что не запрещается, а само его значение изменить нельзя?
0
Герц
524 / 341 / 4
Регистрация: 05.11.2010
Сообщений: 1,077
Записей в блоге: 1
27.10.2012, 14:30 #4
Хотя нет, не так.
Почитай про сочетание спецификатора const и *.
const T* - не позволяет менять данные, на которые указывает,
T* const - не позволяет менять значение указателя (адреса).
Таким образом,
std::vector< T >::const_pointer это практически то же самое что и const T*.
1
DiffEreD
1431 / 768 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
27.10.2012, 14:31 #5
Выводить можно, изменять нельзя:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <vector>
using namespace std;
int main()
{
    vector<int> v;
    for(int i = 1; i<10; i++) v.push_back(i);
    vector<int>::pointer pv = v.data();
    vector<int>::const_pointer cpv = v.data();
    cout<<"vector<int>::pointer: "<<*(pv+2)<<endl;
    cout<<"vector<int>::const_pointer: "<<*(cpv+2)<<endl;
    *(pv+2) = 11;  // можно
    *(cpv+2) = 13; // ошибка
    system("pause");
    return 0;
}
1
27.10.2012, 14:31
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.10.2012, 14:31
Привет! Вот еще темы с ответами:

Константный указатель на константные данные (указатели) - C++
В общем если раскомментить const то ничего не работает может кто знает как правильно передавать константный указатель на константные...

Константный указатель на константу меняет значение - C++
int d = 7; const int* const cd = &amp;d; d = 8; qDebug()&lt;&lt;*cd;

Можно ли утверждать, что в C++ имя функции - константный указатель на функцию ? - C++
В учебнике &quot;Освой самостоятельно C++ за 24 часа&quot; (Либерти, Хорват) говорится, что таки да. А ещё попадались мнения на форумах, что таки...

Константный метод и константный аргумент в методе - C++
Товарищи! Возник вопрос, в чем же разница, между константным методом и ссылкой на const объект в const методе? И использование двух...


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

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

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