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

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

Восстановить пароль Регистрация
 
Max64
19 / 19 / 5
Регистрация: 27.10.2012
Сообщений: 156
27.10.2012, 14:14     Константный указатель #1
Почему в данном примере константный указатель может быть использован для вывода элементов вектора?

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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.10.2012, 14:14     Константный указатель
Посмотрите здесь:

C++ Статический константный объект класса
C++ /Константный итератор
C++ Константный указатель на целое
константный метод и указатель this C++
C++ Можно ли утверждать, что в C++ имя функции - константный указатель на функцию ?
Статический константный член-класса C++
Константный метод и константный аргумент в методе C++
C++ Константный указатель на константные данные (указатели)
Константный указатель на константу меняет значение C++
Константная переменная и константный указатель C++
Константный объект класса квадратная матрица C++
C++ Константный массив в статичном поле класса

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Герц
523 / 340 / 4
Регистрация: 05.11.2010
Сообщений: 1,077
Записей в блоге: 1
27.10.2012, 14:19     Константный указатель #2
Почему нет? :-)
Max64
19 / 19 / 5
Регистрация: 27.10.2012
Сообщений: 156
27.10.2012, 14:23  [ТС]     Константный указатель #3
Т.е. здесь в цикле изменяется адрес указателя, что не запрещается, а само его значение изменить нельзя?
Герц
523 / 340 / 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*.
DiffEreD
 Аватар для DiffEreD
1424 / 761 / 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;
}
Yandex
Объявления
27.10.2012, 14:31     Константный указатель
Ответ Создать тему
Опции темы

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