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

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

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

Студворк — интернет-сервис помощи студентам
C++
1
int *const p1
и
C++
1
int const* p2
Объясните мне в чём тут отличие.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
01.02.2016, 15:34
Ответы с готовыми решениями:

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

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

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

24
 Аватар для wendstor
139 / 137 / 66
Регистрация: 15.05.2012
Сообщений: 516
01.02.2016, 15:45
Цитата Сообщение от Maxim09 Посмотреть сообщение
int *const p1
константный указатель на int (нельзя менять)
Цитата Сообщение от Maxim09 Посмотреть сообщение
int const* p2
Указатель на целое (p2) которое нельзя менять
1
 Аватар для Maxim09
1 / 1 / 4
Регистрация: 23.08.2015
Сообщений: 458
01.02.2016, 15:54  [ТС]
То есть в этом случае
C++
1
int *const p1
целочисленный тип менять нельзя на символьный или дробный так?
А в этом случае
C++
1
int const* p2
переменную p2 менять нельзя, а можно ли будет осуществить присвоение, на подобие: p2=5 к примеру?
0
2688 / 2260 / 244
Регистрация: 03.07.2012
Сообщений: 8,231
Записей в блоге: 1
01.02.2016, 16:13
int const* p -- нельзя писать *p=5;
int *const p -- нельзя писать p=&i и нельзя p=p2; //i-переменная целого типа, а p2-указатель на переменную int
1
 Аватар для wendstor
139 / 137 / 66
Регистрация: 15.05.2012
Сообщений: 516
01.02.2016, 16:14
Цитата Сообщение от Maxim09 Посмотреть сообщение
целочисленный тип менять нельзя на символьный или дробный так?
Да
Цитата Сообщение от Maxim09 Посмотреть сообщение
переменную p2 менять нельзя, а можно ли будет осуществить присвоение, на подобие: p2=5 к примеру?
Да, можно но только с "передачей" адреса
C++
1
2
  int tmp = 8;
  p2 = &tmp;
p.s. C++ сам недавно стал изучать...
1
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
01.02.2016, 20:30
Лучший ответ Сообщение было отмечено 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
 Аватар для wendstor
139 / 137 / 66
Регистрация: 15.05.2012
Сообщений: 516
01.02.2016, 21:19
Цитата Сообщение от castaway Посмотреть сообщение
int const * p2;
"плохой тон объявления" ) int const* p2;
p.s. move в подарок и константы меняются )))

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

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

Решение

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

Не по теме:

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


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

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

P.S.: я скоро стану ставить вам отрицательные отзывы за то что вы меня "просто так" упрекаете.
0
 Аватар для wendstor
139 / 137 / 66
Регистрация: 15.05.2012
Сообщений: 516
01.02.2016, 22:01
Цитата Сообщение от castaway Посмотреть сообщение
Вы читать умеете? Это не мои слова.
В вас, не кто и не ссылался. Будьте спкойны. И тответ не относится к Вам....
Russian - http://www.kurzenkov.com/Artic... erisk.html
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4706 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
01.02.2016, 22:05
Цитата Сообщение от castaway Посмотреть сообщение
Не всегда переменная
Никогда не переменная. Указатель это тип. Но в фразе: указатель, это такая переменная, которая используется для доступа к другой переменной.
для новичка, - всё правильно. Хотя спорить можно, но бессмысленно.
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
01.02.2016, 22:12
Цитата Сообщение от wendstor Посмотреть сообщение
В вас, не кто и не ссылался.
Вы бы помимо звёздочек ещё и предложения правильно строили...
wendstor, зачем вы навязываете свои предпочтения? Почему вы считаете что "звёздочка" должна стоять именно там!?

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

Добавлено через 1 минуту
Цитата Сообщение от castaway Посмотреть сообщение
и тем не менее я ни кого ни в чём не убеждаю
....
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
01.02.2016, 22:34
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru