Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.94/16: Рейтинг темы: голосов - 16, средняя оценка - 4.94
1 / 1 / 4
Регистрация: 23.08.2015
Сообщений: 458
1

В чём отличие константного указателя и указателя на константу?

01.02.2016, 15:34. Просмотров 3210. Ответов 24
Метки нет (Все метки)

C++
1
int *const p1
и
C++
1
int const* p2
Объясните мне в чём тут отличие.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.02.2016, 15:34
Ответы с готовыми решениями:

Возвращение неконстантного указателя из константного указателя на строку
Не могу до конца понять один момент. Допустим, у нас есть функция searchSymbol, которая принимает...

в чем смысл константного указателя на коллекцию (в классе итератора)
Привет. Прошу подскажите, я чего-то не улавливаю. Наткнулся на пример реализации класса итератора:...

Возврат указателя на константу из подпрограммы?
Это вообще можно сделать на TP? Реализовать функцию типа как на Си: const int* f();

Отличие указателя от массива
Чем отличается wchar_t* strDelimit = L" "; от wchar_t strDelimit = L" "; Понятно что одно...

24
135 / 134 / 65
Регистрация: 15.05.2012
Сообщений: 504
01.02.2016, 15:45 2
Цитата Сообщение от Maxim09 Посмотреть сообщение
int *const p1
константный указатель на int (нельзя менять)
Цитата Сообщение от Maxim09 Посмотреть сообщение
int const* p2
Указатель на целое (p2) которое нельзя менять
1
1 / 1 / 4
Регистрация: 23.08.2015
Сообщений: 458
01.02.2016, 15:54  [ТС] 3
То есть в этом случае
C++
1
int *const p1
целочисленный тип менять нельзя на символьный или дробный так?
А в этом случае
C++
1
int const* p2
переменную p2 менять нельзя, а можно ли будет осуществить присвоение, на подобие: p2=5 к примеру?
0
2572 / 2188 / 233
Регистрация: 03.07.2012
Сообщений: 7,896
Записей в блоге: 1
01.02.2016, 16:13 4
int const* p -- нельзя писать *p=5;
int *const p -- нельзя писать p=&i и нельзя p=p2; //i-переменная целого типа, а p2-указатель на переменную int
1
135 / 134 / 65
Регистрация: 15.05.2012
Сообщений: 504
01.02.2016, 16:14 5
Цитата Сообщение от Maxim09 Посмотреть сообщение
целочисленный тип менять нельзя на символьный или дробный так?
Да
Цитата Сообщение от Maxim09 Посмотреть сообщение
переменную p2 менять нельзя, а можно ли будет осуществить присвоение, на подобие: p2=5 к примеру?
Да, можно но только с "передачей" адреса
C++
1
2
  int tmp = 8;
  p2 = &tmp;
p.s. C++ сам недавно стал изучать...
1
Эксперт С++
4964 / 3070 / 456
Регистрация: 10.11.2010
Сообщений: 11,159
Записей в блоге: 10
01.02.2016, 20:30 6
Лучший ответ Сообщение было отмечено Maxim09 как решение

Решение

Цитата Сообщение от wendstor Посмотреть сообщение
Да
Нет.
Цитата Сообщение от wendstor Посмотреть сообщение
p.s. C++ сам недавно стал изучать...
А уже так уверенно рассуждаешь?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    int * const p1;
    int const * p2;
    int const * const p3;
 
    p1++;       // нельзя
    ++p1;       // нельзя
    p1 = p2;    // нельзя
    *p1 = 123;  // можно
 
    p2++;       // можно
    ++p2;       // можно
    p2 = p1;    // можно
    *p2 = 123;  // нельзя
 
    p3++;       // нельзя
    ++p3;       // нельзя
    p3 = p1;    // нельзя
    *p3 = 123;  // нельзя
Читаем справа-налево:
int * const p1; - константный указатель - указатель нельзя менять.
int const * p2; - указатель на константу - нельзя менять значение по указателю.
int const * const p3; - константный указатель на константу - нельзя менять не указатель, ни значение по указателю.
5
135 / 134 / 65
Регистрация: 15.05.2012
Сообщений: 504
01.02.2016, 21:19 7
Цитата Сообщение от castaway Посмотреть сообщение
int const * p2;
"плохой тон объявления" ) int const* p2;
p.s. move в подарок и константы меняются )))

Добавлено через 5 минут
Цитата Сообщение от castaway Посмотреть сообщение
Нет.
Читать умеете? А то сомнения))
0
Эксперт С++
4964 / 3070 / 456
Регистрация: 10.11.2010
Сообщений: 11,159
Записей в блоге: 10
01.02.2016, 21:25 8
Цитата Сообщение от wendstor Посмотреть сообщение
Читать умеете? А то сомнения))
Читать умею. Но суть не в том, что:
Цитата Сообщение от Maxim09 Посмотреть сообщение
целочисленный тип менять нельзя на символьный или дробный
, а в том нельзя менять значение самого указателя. Вы просто ввели новичка в заблуждение.

Добавлено через 2 минуты
Цитата Сообщение от wendstor Посмотреть сообщение
"плохой тон объявления" ) int const* p2;
p.s. move в подарок и константы меняются )))
Кстати, поясните, в чём тон "плох"?
1
Комп_Оратор)
Эксперт по математике/физике
8459 / 4217 / 575
Регистрация: 04.12.2011
Сообщений: 12,601
Записей в блоге: 14
01.02.2016, 21:31 9
Лучший ответ Сообщение было отмечено Maxim09 как решение

Решение

Maxim09, указатель, это такая переменная, которая используется для доступа к другой переменной. Она позволяет получить доступ к значению и к адресу места, где оно лежит. Тип указателя говорит компилятору о том, что делать с тем, что там лежит (формат, допустимые операции). Модификатор const может быть применён для запрета модификации адреса и/или значения. Синтаксис устанавливает описание типа до признака указателя, - символа звёздочка:
int * - (указатель на целое)
тут и можно добавить ограничение уточняя "какое целое":
const int * (указатель на неизменное целое) порядок следования, значения не имеет, то есть можно писать и int const*.
Звездочка означает "указатель". Оно так и читается мозгом "на целую константу указатель". То есть сразу после звёздочки можно уточнить "какой":
int *const (на целое указатель константный)
То есть мозг читает это по польски. С прилагательными в конце. А произносим мы по человечески. Страуструпа это мучило, но так придумано в Си и требование совместимости диктовало именно такой синтаксис.
В общем, привыкнуть можно.
2
135 / 134 / 65
Регистрация: 15.05.2012
Сообщений: 504
01.02.2016, 21:32 10
Цитата Сообщение от castaway Посмотреть сообщение
, а в том нельзя менять значение самого указателя. Вы просто ввели новичка в заблуждение.
согласен) соррри... Не правильно выразился ) Извеняюсь....
Дабы не плодить темы. Интересует STL что почитать ?
0
Эксперт С++
4964 / 3070 / 456
Регистрация: 10.11.2010
Сообщений: 11,159
Записей в блоге: 10
01.02.2016, 21:35 11

Не по теме:

Цитата Сообщение от IGPIGP Посмотреть сообщение
Maxim09, указатель, это такая переменная ...
Не всегда переменная:)


Цитата Сообщение от wendstor Посмотреть сообщение
Интересует STL что почитать ?
Интересует.
0
135 / 134 / 65
Регистрация: 15.05.2012
Сообщений: 504
01.02.2016, 21:46 12
Цитата Сообщение от castaway Посмотреть сообщение
Кстати, поясните, в чём тон "плох"?
В одном из блогов читал (точно сказать не могу, но на буржуйском, вспомню ссылку дам) где поясняют что данное описание пременных/методов путают начинающих программистов с++, не говоря о & (адресах, объектах)...
Цитата Сообщение от castaway Посмотреть сообщение
Интересует.
Несомненно...

Добавлено через 1 минуту
Цитата Сообщение от castaway Посмотреть сообщение
Maxim09, указатель, это такая переменная ...
Это адрес...
0
Эксперт С++
4964 / 3070 / 456
Регистрация: 10.11.2010
Сообщений: 11,159
Записей в блоге: 10
01.02.2016, 21:53 13
Цитата Сообщение от wendstor Посмотреть сообщение
В одном из блогов ...
"Нет ножек - нет мультиков!". Если есть что предъявить - предъявляйте.
Цитата Сообщение от wendstor Посмотреть сообщение
Maxim09, указатель, это такая переменная ...
Вы читать умеете? Это не мои слова.

P.S.: я скоро стану ставить вам отрицательные отзывы за то что вы меня "просто так" упрекаете.
0
135 / 134 / 65
Регистрация: 15.05.2012
Сообщений: 504
01.02.2016, 22:01 14
Цитата Сообщение от castaway Посмотреть сообщение
Вы читать умеете? Это не мои слова.
В вас, не кто и не ссылался. Будьте спкойны. И тответ не относится к Вам....
Russian - http://www.kurzenkov.com/Artic... erisk.html
0
Комп_Оратор)
Эксперт по математике/физике
8459 / 4217 / 575
Регистрация: 04.12.2011
Сообщений: 12,601
Записей в блоге: 14
01.02.2016, 22:05 15
Цитата Сообщение от castaway Посмотреть сообщение
Не всегда переменная
Никогда не переменная. Указатель это тип. Но в фразе: указатель, это такая переменная, которая используется для доступа к другой переменной.
для новичка, - всё правильно. Хотя спорить можно, но бессмысленно.
0
Эксперт С++
4964 / 3070 / 456
Регистрация: 10.11.2010
Сообщений: 11,159
Записей в блоге: 10
01.02.2016, 22:12 16
Цитата Сообщение от wendstor Посмотреть сообщение
В вас, не кто и не ссылался.
Вы бы помимо звёздочек ещё и предложения правильно строили...
wendstor, зачем вы навязываете свои предпочтения? Почему вы считаете что "звёздочка" должна стоять именно там!?

Добавлено через 5 минут
Цитата Сообщение от IGPIGP Посмотреть сообщение
Никогда не переменная. Указатель это тип.
Вы как будто специально хотите холивар затеять))
int * p; // p - это и указатель и переменная
0
135 / 134 / 65
Регистрация: 15.05.2012
Сообщений: 504
01.02.2016, 22:25 17
Цитата Сообщение от castaway Посмотреть сообщение
wendstor, зачем вы навязываете свои предпочтения? Почему вы считаете что "звёздочка" должна стоять именно там!?
Я dephi'ст это не привычка, а обязанность. И я не навязываю, у каждого свои предпочтения.... В данном случае я считаю правым, данный метод реализации... 7 лет опыта в delphi в минус не ставит....
0
710 / 282 / 16
Регистрация: 31.03.2013
Сообщений: 1,340
01.02.2016, 22:29 18
Цитата Сообщение от wendstor Посмотреть сообщение
7 лет опыта в delphi в минус не ставит....
У меня для тебя плохие новости
1
Эксперт С++
4964 / 3070 / 456
Регистрация: 10.11.2010
Сообщений: 11,159
Записей в блоге: 10
01.02.2016, 22:30 19
Цитата Сообщение от wendstor Посмотреть сообщение
Я dephi'ст это не привычка, а обязанность. И я не навязываю, у каждого свои предпочтения.... В данном случае я считаю правым, данный метод реализации... 7 лет опыта в delphi в минус не ставит....
А я знаком с C++ не менее 15 лет, и тем не менее я ни кого ни в чём не убеждаю, хотя у меня и есть свои предпочтения.
0
135 / 134 / 65
Регистрация: 15.05.2012
Сообщений: 504
01.02.2016, 22:34 20
Цитата Сообщение от Voivoid Посмотреть сообщение
У меня для тебя плохие новости
Поверь а Сях нет такого.... Репутация это - отчётность....

Добавлено через 1 минуту
Цитата Сообщение от castaway Посмотреть сообщение
и тем не менее я ни кого ни в чём не убеждаю
....
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.02.2016, 22:34

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Отличие ссылки от указателя
Здравствуйте. Не совсем понимаю отличие ссылки от указателя. В частности, при передаче результата...

Отличие массива фиксированной длины от указателя
Объясните на примере в чем отличие от *(указателя) когда это массивы?

Почему увеличение указателя на sizeof(тип) не тождественно инкременту этого же указателя?
Всем доброго дня.:) Можете обьяснить ,почему при инкриментировании указателя,его значение(адресс)...

Создание указателя на экземпляр класса, описанного после объявления указателя
Здравствуйте! Проблема в том, что нужно сделать так: class A{ public: B* b = nullptr; }; ...


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

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

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