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

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

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

C++
1
int *const p1
и
C++
1
int const* p2
Объясните мне в чём тут отличие.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.02.2016, 15:34
Я подобрал для вас темы с готовыми решениями и ответами на вопрос В чём отличие константного указателя и указателя на константу? (C++):

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

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

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

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

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

Преобразование кода без указателя в код с использованием указателя
Правильно ли выполнил? Исходный код без указателя #include <iostream>...

24
wendstor
133 / 133 / 64
Регистрация: 15.05.2012
Сообщений: 501
01.02.2016, 15:45 #2
Цитата Сообщение от Maxim09 Посмотреть сообщение
int *const p1
константный указатель на int (нельзя менять)
Цитата Сообщение от Maxim09 Посмотреть сообщение
int const* p2
Указатель на целое (p2) которое нельзя менять
1
Maxim09
1 / 1 / 4
Регистрация: 23.08.2015
Сообщений: 454
01.02.2016, 15:54  [ТС] #3
То есть в этом случае
C++
1
int *const p1
целочисленный тип менять нельзя на символьный или дробный так?
А в этом случае
C++
1
int const* p2
переменную p2 менять нельзя, а можно ли будет осуществить присвоение, на подобие: p2=5 к примеру?
0
zer0mail
2451 / 2085 / 216
Регистрация: 03.07.2012
Сообщений: 7,566
Записей в блоге: 1
01.02.2016, 16:13 #4
int const* p -- нельзя писать *p=5;
int *const p -- нельзя писать p=&i и нельзя p=p2; //i-переменная целого типа, а p2-указатель на переменную int
1
wendstor
133 / 133 / 64
Регистрация: 15.05.2012
Сообщений: 501
01.02.2016, 16:14 #5
Цитата Сообщение от Maxim09 Посмотреть сообщение
целочисленный тип менять нельзя на символьный или дробный так?
Да
Цитата Сообщение от Maxim09 Посмотреть сообщение
переменную p2 менять нельзя, а можно ли будет осуществить присвоение, на подобие: p2=5 к примеру?
Да, можно но только с "передачей" адреса
C++
1
2
  int tmp = 8;
  p2 = &tmp;
p.s. C++ сам недавно стал изучать...
1
castaway
Эксперт С++
4927 / 3034 / 453
Регистрация: 10.11.2010
Сообщений: 11,089
Записей в блоге: 10
Завершенные тесты: 1
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; - константный указатель на константу - нельзя менять не указатель, ни значение по указателю.
4
wendstor
133 / 133 / 64
Регистрация: 15.05.2012
Сообщений: 501
01.02.2016, 21:19 #7
Цитата Сообщение от castaway Посмотреть сообщение
int const * p2;
"плохой тон объявления" ) int const* p2;
p.s. move в подарок и константы меняются )))

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

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

Решение

Maxim09, указатель, это такая переменная, которая используется для доступа к другой переменной. Она позволяет получить доступ к значению и к адресу места, где оно лежит. Тип указателя говорит компилятору о том, что делать с тем, что там лежит (формат, допустимые операции). Модификатор const может быть применён для запрета модификации адреса и/или значения. Синтаксис устанавливает описание типа до признака указателя, - символа звёздочка:
int * - (указатель на целое)
тут и можно добавить ограничение уточняя "какое целое":
const int * (указатель на неизменное целое) порядок следования, значения не имеет, то есть можно писать и int const*.
Звездочка означает "указатель". Оно так и читается мозгом "на целую константу указатель". То есть сразу после звёздочки можно уточнить "какой":
int *const (на целое указатель константный)
То есть мозг читает это по польски. С прилагательными в конце. А произносим мы по человечески. Страуструпа это мучило, но так придумано в Си и требование совместимости диктовало именно такой синтаксис.
В общем, привыкнуть можно.
2
wendstor
133 / 133 / 64
Регистрация: 15.05.2012
Сообщений: 501
01.02.2016, 21:32 #10
Цитата Сообщение от castaway Посмотреть сообщение
, а в том нельзя менять значение самого указателя. Вы просто ввели новичка в заблуждение.
согласен) соррри... Не правильно выразился ) Извеняюсь....
Дабы не плодить темы. Интересует STL что почитать ?
0
castaway
Эксперт С++
4927 / 3034 / 453
Регистрация: 10.11.2010
Сообщений: 11,089
Записей в блоге: 10
Завершенные тесты: 1
01.02.2016, 21:35 #11

Не по теме:

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


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

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

P.S.: я скоро стану ставить вам отрицательные отзывы за то что вы меня "просто так" упрекаете.
0
wendstor
133 / 133 / 64
Регистрация: 15.05.2012
Сообщений: 501
01.02.2016, 22:01 #14
Цитата Сообщение от castaway Посмотреть сообщение
Вы читать умеете? Это не мои слова.
В вас, не кто и не ссылался. Будьте спкойны. И тответ не относится к Вам....
Russian - http://www.kurzenkov.com/Articles/CNotes_Asterisk.html
0
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
7004 / 3297 / 448
Регистрация: 04.12.2011
Сообщений: 9,128
Записей в блоге: 5
01.02.2016, 22:05 #15
Цитата Сообщение от castaway Посмотреть сообщение
Не всегда переменная
Никогда не переменная. Указатель это тип. Но в фразе: указатель, это такая переменная, которая используется для доступа к другой переменной.
для новичка, - всё правильно. Хотя спорить можно, но бессмысленно.
0
castaway
Эксперт С++
4927 / 3034 / 453
Регистрация: 10.11.2010
Сообщений: 11,089
Записей в блоге: 10
Завершенные тесты: 1
01.02.2016, 22:12 #16
Цитата Сообщение от wendstor Посмотреть сообщение
В вас, не кто и не ссылался.
Вы бы помимо звёздочек ещё и предложения правильно строили...
wendstor, зачем вы навязываете свои предпочтения? Почему вы считаете что "звёздочка" должна стоять именно там!?

Добавлено через 5 минут
Цитата Сообщение от IGPIGP Посмотреть сообщение
Никогда не переменная. Указатель это тип.
Вы как будто специально хотите холивар затеять))
int * p; // p - это и указатель и переменная
0
wendstor
133 / 133 / 64
Регистрация: 15.05.2012
Сообщений: 501
01.02.2016, 22:25 #17
Цитата Сообщение от castaway Посмотреть сообщение
wendstor, зачем вы навязываете свои предпочтения? Почему вы считаете что "звёздочка" должна стоять именно там!?
Я dephi'ст это не привычка, а обязанность. И я не навязываю, у каждого свои предпочтения.... В данном случае я считаю правым, данный метод реализации... 7 лет опыта в delphi в минус не ставит....
0
Voivoid
708 / 280 / 15
Регистрация: 31.03.2013
Сообщений: 1,339
01.02.2016, 22:29 #18
Цитата Сообщение от wendstor Посмотреть сообщение
7 лет опыта в delphi в минус не ставит....
У меня для тебя плохие новости
1
castaway
Эксперт С++
4927 / 3034 / 453
Регистрация: 10.11.2010
Сообщений: 11,089
Записей в блоге: 10
Завершенные тесты: 1
01.02.2016, 22:30 #19
Цитата Сообщение от wendstor Посмотреть сообщение
Я dephi'ст это не привычка, а обязанность. И я не навязываю, у каждого свои предпочтения.... В данном случае я считаю правым, данный метод реализации... 7 лет опыта в delphi в минус не ставит....
А я знаком с C++ не менее 15 лет, и тем не менее я ни кого ни в чём не убеждаю, хотя у меня и есть свои предпочтения.
0
wendstor
133 / 133 / 64
Регистрация: 15.05.2012
Сообщений: 501
01.02.2016, 22:34 #20
Цитата Сообщение от Voivoid Посмотреть сообщение
У меня для тебя плохие новости
Поверь а Сях нет такого.... Репутация это - отчётность....

Добавлено через 1 минуту
Цитата Сообщение от castaway Посмотреть сообщение
и тем не менее я ни кого ни в чём не убеждаю
....
0
01.02.2016, 22:34
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.02.2016, 22:34
Привет! Вот еще темы с решениями:

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

Различные варианты инициализации указателя - в чём точная разница между ними?
Немного непонятен один момент. Есть некий класс Statement (конструктор...

Написать обработчик исключений ситуации при преобразовании указателя на класс B до указателя на абстрактный класс А ...
Написать обработчик исключений ситуации при преобразовании указателя на класс B...

Отличие передачи по ссылке от передачи указателя ?
Чем отличаюся следующие коды? class MyClass{ int val; public: int...


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

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

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