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

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

Войти
Регистрация
Восстановить пароль
 
HighPredator
5474 / 1840 / 342
Регистрация: 10.12.2010
Сообщений: 5,431
Записей в блоге: 3
#1

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

17.06.2013, 23:11. Просмотров 551. Ответов 3

Вскрылся вот такой пробел в знаниях/понимании. Итак, есть предположим однонаправленный список (в общем без разницы что).
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++
В целочисленном массиве Х(N) удалить все элементы, расположенные между макси-мальным и минимальным элементами. Найти среднее арифметическое...

Нюансы синтаксиса и семантики: ссылки, указатели и массивы в качестве аргументов функций - C++
Перенесено из этой темы. Чтобы вернуть указатели почему вот здесь не надо приводить janr к типу указателя char* на выходе? char*...

Указатели на массивы в качестве аргументов - C++
Помогите пожалуйста а то вообще идей никаких нет( Напишите функцию поиска минимального элемента в динамическом двухмерном массиве...

Указатели или ссылки (в качестве аргументов функции) ? - C++
В каких случая надо использовать ссылки и в каких указатели в качестве аргументов функции? В общем поняла, что и те и другие полезны для...

Указатели, адресная арифметика и передача аргументов функций по значению и по ссылке - C++
Подскажите, пожалуйста, как решить такую задачу вручную. На экзамене предложат задание такого типа НА БУМАГЕ, и надо будет написать, что...

Указатели на константные объекты - C++
Нельзя создать неконстантный указатель на константный объект по понятным причинам, но имеем такой код: typedef char* pStr; int...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Olivеr
412 / 408 / 13
Регистрация: 06.10.2011
Сообщений: 831
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
5474 / 1840 / 342
Регистрация: 10.12.2010
Сообщений: 5,431
Записей в блоге: 3
17.06.2013, 23:22  [ТС]     Константные указатели в качестве аргументов функций #3
Ясно. Спасибо.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.06.2013, 23:59     Константные указатели в качестве аргументов функций
Еще ссылки по теме:

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

Константные и не константные ссылки. Приведения типов. Нужно уточнение - C++
Не очень понимаю в чем различие (2,3 строчки). int x = 10; double &y = x; const double &y = x; Почему для не...

Использование массивов в качестве аргументов функции - C++
Написала программу, работает правильно, только не совсем по условию задачи. Помоги пожалуйста исправить. Условие: найти наибольшую...

Идентификаторы списка в качестве аргументов функции - C++
Хочу организовать поиск по списку с помощью функции, в которую бы передавались: поле, по которому искать (собсно какая-то переменная из...

Ostream и ofstream в качестве аргументов полиморфной функции - C++
Здравствуйте! Перегрузил оператор << с ostream и ofstream для пользовательского класса. ofstream &operator << (ofstream &output,...

Как передать пути в качестве аргументов приложению? - C++
Здравствуйте. Как запускать приложения в дебагере VS с параметрами? Как передать пути приложению, запуская его другим приложением....


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

Или воспользуйтесь поиском по форуму:
rangerx
1932 / 1541 / 141
Регистрация: 31.05.2009
Сообщений: 2,911
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     Константные указатели в качестве аргументов функций
Ответ Создать тему
Опции темы

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