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

Константные указатели в качестве аргументов функций - C++

Восстановить пароль Регистрация
 
HighPredator
 Аватар для HighPredator
5350 / 1733 / 320
Регистрация: 10.12.2010
Сообщений: 5,119
Записей в блоге: 3
17.06.2013, 23:11     Константные указатели в качестве аргументов функций #1
Вскрылся вот такой пробел в знаниях/понимании. Итак, есть предположим однонаправленный список (в общем без разницы что).
C++
1
2
3
4
5
struct TNode
{
  int data;
  TNode* next;
};
Хотим написать функцию, читающую данные списка. Указываем в описании, что имеем указатель на константные данные (ведь менять ничего не будем).
C++
1
2
3
void PrintNodes(const TNode* start)
{
  TNode* i=start; // и тут error
И получаем ошибку времени компиляции. Как тогда список-то проходить?...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.06.2013, 23:11     Константные указатели в качестве аргументов функций
Посмотрите здесь:

Указатели, адресная арифметика и передача аргументов функций по значению и по ссылке C++
Указатели на массивы в качестве аргументов C++
C++ Написать программу с использованием функции, которая сравнивает две строки, заданные в качестве её аргументов
C++ Указатели или ссылки (в качестве аргументов функции) ?
Идентификаторы списка в качестве аргументов функции C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Olivеr
 Аватар для Olivеr
411 / 407 / 13
Регистрация: 06.10.2011
Сообщений: 830
17.06.2013, 23:18     Константные указатели в качестве аргументов функций #2
C++
1
2
3
4
void PrintNodes(const TNode* start)
{
  const TNode* i=start;
  ++i; //ok
Добавлено через 2 минуты
const Tnode *start - указатель на константу
Tnode* const start - константный указатель на не константу
HighPredator
 Аватар для HighPredator
5350 / 1733 / 320
Регистрация: 10.12.2010
Сообщений: 5,119
Записей в блоге: 3
17.06.2013, 23:22  [ТС]     Константные указатели в качестве аргументов функций #3
Ясно. Спасибо.
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
17.06.2013, 23:59     Константные указатели в качестве аргументов функций #4
C++
1
2
3
4
5
6
void print(const TNode* start)
{
    for(const TNode* p = start; p != NULL; p = p->next)
        std::cout << p->data << ' ';
    std::cout << std::endl;
}
const TNode* start следует читать, как "указатель на константные данные". Сама переменная start при этом не является константой, например здесь
C++
1
2
const int i = 10; 
const int* p = &i;
переменная p не является константой, она всего лишь делает данные, на которые указывает, доступными только для чтения(*p - только чтение, p - чтение и запись)
В то же время, запись вида
C++
1
2
int i = 10;
int* const p = &i;
делает константным уже сам указатель(*p - чтение и запись, p - только чтение).
Т.е. всё дело в символе * - расположен он до или после const.
Ну и соответсвенно так
C++
1
2
const int i = 10;
const int* const p = &i;
объявляется константный указатель на константные данные.
Yandex
Объявления
17.06.2013, 23:59     Константные указатели в качестве аргументов функций
Ответ Создать тему

Метки
const, const-correctness, параметры, указатели
Опции темы

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