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

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

Войти
Регистрация
Восстановить пароль
 
TempuSFatumA
1 / 1 / 0
Регистрация: 02.04.2013
Сообщений: 90
#1

Ипользование const с указателем, параметром функции - C++

11.04.2013, 19:02. Просмотров 728. Ответов 8
Метки нет (Все метки)

Здравия желаю!

Хотелось бы узнать, как можно работать с параметрами-указателями при работе функций вроде
C++
1
2
3
4
void f1(char *c){cout<<c;}
void f2(const char *c){cout<<c;}
void f3(char * const c){cout<<c;}
void f4(const char * const c){cout<<c;}
Если я не ошибаюсь, в 1 случае копию указателя из вызывающего метода и значения элементов массива можно изменять по своему усмотрению(предусмотрев освобождение памяти, конечно же).
Во 2м - значения элементов массива можно менять, но не копию указателя.
В 3м - Нельзя менять значение 1го элемента, но можно копию указателя(опять-таки предусмотрев освобождение памяти).
В 4м - Нельзя менять значение 1го элемента и копию указателя.

Просьба сказать, прав ли я в своих домыслах, а если не прав, то где именно.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
stima
457 / 306 / 24
Регистрация: 22.03.2011
Сообщений: 1,003
Завершенные тесты: 2
11.04.2013, 19:08     Ипользование const с указателем, параметром функции #2
Все что слева от * относится к данным. Справа к указателю.
abit
262 / 261 / 33
Регистрация: 03.02.2013
Сообщений: 716
11.04.2013, 19:12     Ипользование const с указателем, параметром функции #3
Во 2м - значения элементов массива можно менять, но не копию указателя.
точно нет

C++
1
const char *c
здесь const относится к char а не к указателю, это говорит, что вы не можете использовать указатель с для изменения данных - он указывает на элементы типа const char

однако заметьте, что по стандарту функция с сигнатурой
C++
1
void f2(const char *c)
может принимать как const-объекты, так и не const-объекты

а
C++
1
void f2(char *c)
не может принимать const-объект на вход
TempuSFatumA
1 / 1 / 0
Регистрация: 02.04.2013
Сообщений: 90
11.04.2013, 19:15  [ТС]     Ипользование const с указателем, параметром функции #4
Это понятно. Мне надо понять: при const справа от *, значения pointer[1..n] менять можно?

Добавлено через 2 минуты
abit, то есть, чтобы создать абсолютно несгибаемый указатель нужно const char const *a
abit
262 / 261 / 33
Регистрация: 03.02.2013
Сообщений: 716
11.04.2013, 19:20     Ипользование const с указателем, параметром функции #5
Цитата Сообщение от TempuSFatumA Посмотреть сообщение
Это понятно. Мне надо понять: при const справа от *, значения pointer[1..n] менять можно?

Добавлено через 2 минуты
abit, то есть, чтобы создать абсолютно несгибаемый указатель нужно const char const *a
1) ваш код
C++
1
 void f3(char * const c)
позволяет менять элементы, но не позволяет изменять указатель
тут const относится к c, а тип данных просто - char *
2) не const char const *a а, вы правильно написали:

C++
1
void f4(const char * const c){cout<<c;}
здесь const-указатель на const char *
но даже в таком случае я бы не сказал что он совсем не сгибаемый, можно кастануть const_cast<char*> и уже на вашей совести будет

если же вы по поводу 1-го не первого элемента - они все будут не изменны в const char * c, не только первый
TempuSFatumA
1 / 1 / 0
Регистрация: 02.04.2013
Сообщений: 90
11.04.2013, 19:26  [ТС]     Ипользование const с указателем, параметром функции #6
abit, то есть запретить изменение элементов по адресу нельзя, только самого адреса?

Или можно с помощью const char* и char*... Именно они регулируют это?
abit
262 / 261 / 33
Регистрация: 03.02.2013
Сообщений: 716
11.04.2013, 19:29     Ипользование const с указателем, параметром функции #7
Цитата Сообщение от TempuSFatumA Посмотреть сообщение
abit, то есть запретить изменение элементов по адресу нельзя, только самого адреса?

Или можно с помощью const char* и char*... Именно они регулируют это?
ещё раз
const char* p - запрещает менять данные в массиве , а сам указатель p - сдвигать имеете право
char * const p - запрещает менять указатель p, а данные по (*p) - пожалуйста
const char * const p - запрещает и то и другое
TempuSFatumA
1 / 1 / 0
Регистрация: 02.04.2013
Сообщений: 90
11.04.2013, 19:32  [ТС]     Ипользование const с указателем, параметром функции #8
Цитата Сообщение от abit Посмотреть сообщение
ещё раз
const char* p - запрещает менять данные в массиве , а сам указатель p - сдвигать имеете право
char * const p - запрещает менять указатель p, а данные по (*p) - пожалуйста
const char * const p - запрещает и то и другое
Да есть же! Спасибочки, это то, что я и хотел узнать!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.04.2013, 21:35     Ипользование const с указателем, параметром функции
Еще ссылки по теме:
Работа с указателем на массив в функции (!!!) C++
C++ Массив в функции со static указателем на него
C++ Аргумент типа "HDC" несовместим с параметром типа const PAINTSTRUCT
Ипользование класса stringstream C++
Const после функции C++

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

Или воспользуйтесь поиском по форуму:
go
Эксперт C++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
11.04.2013, 21:35     Ипользование const с указателем, параметром функции #9
Цитата Сообщение от TempuSFatumA Посмотреть сообщение
Во 2м - значения элементов массива можно менять, но не копию указателя.
Нет. http://www.cyberforum.ru/blogs/18334/blog87.html
Yandex
Объявления
11.04.2013, 21:35     Ипользование const с указателем, параметром функции
Ответ Создать тему
Опции темы

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