Форум программистов, компьютерный форум, киберфорум
Наши страницы

C++

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

Чем отличаются указатель на строку и константный указатель на строку? - C++

07.01.2018, 19:19. Просмотров 227. Ответов 2
Метки нет (Все метки)

Просто обьясните, как такое возможно?
C++
1
char *a="fff";
В чем отличие от этого? :
C++
1
const char *a="fff";
Ведь так и так строку нельзя изменить.
Вообще как так, обычно указатель содержит ссылку на обьект, а тут он на строку ссылается,у нее же нет адресса, что за?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.01.2018, 19:19
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Чем отличаются указатель на строку и константный указатель на строку? (C++):

Как понять этот константный указатель? - C++
В общем, имеется класс Cat. Объект класса - SimpleCat. И имеется функция с константым указателем: const SimpleCat* const...

Зачем нужен указатель на указатель при работе с однонаправленным списком? - C++
День добрый. Столкнулся с непониманием этой темы. В частности, совершенно непонятен алгоритм инициализации такого вот списка. Например:...

Указатель this - C++
как в windows Forms // горячую клавишу?

Указатель на функцию - C++
Доброго времени суток! Кто может посоветовать способ присвоить указателю на функцию значение, т.е. имя функции, если мы не будем...

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

Указатель на метод - C++
struct abc{ int a; int b; int c; abc(int na = 0, int nb = 0, int nc = 0):a(na),b(nb),c(nc){}; bool conf(int d){ ...

2
hoggy
6862 / 3069 / 525
Регистрация: 15.11.2014
Сообщений: 6,977
Завершенные тесты: 1
07.01.2018, 21:39 #2
Цитата Сообщение от javay Посмотреть сообщение
Просто обьясните, как такое возможно?
древнее наследние раздолбайного языка си.

Цитата Сообщение от javay Посмотреть сообщение
В чем отличие от этого? :
const char *a="fff";
первый вариант запрещен:
C++
1
2
source_file.cpp:7:15: warning: ISO C++ forbids converting a string constant to ‘char*[-Wwrite-strings]
     char *a = "fff";
но оставлен для говнокодеров обратной совместимости с сишным кодом.


Цитата Сообщение от javay Посмотреть сообщение
Вообще как так, обычно указатель содержит ссылку на обьект, а тут он на строку ссылается,у нее же нет адресса, что за?
строка - вполне себе полноценный объект.
у неё есть вполне себе валидный адрес.
0
Bretbas
Каждому свое
518 / 204 / 50
Регистрация: 05.08.2013
Сообщений: 1,600
Завершенные тесты: 2
07.01.2018, 21:49 #3
javay,
Цитата Сообщение от javay Посмотреть сообщение
обычно указатель содержит ссылку на обьект, а тут он на строку ссылается,у нее же нет адресса, что за?
Указатель хранит адрес. Вот ваше a хранит некий адрес, где хранится строка "fff".

Цитата Сообщение от javay Посмотреть сообщение
В чем отличие от этого? :
Объясняю. Дело в том, что в языке C/C++ все строковые литералы имеют тип const char [N], где N - количество символов в строке + завершающий нуль. Так вот, такой код:
char *a="fff";
с этой строкой нельзя работать, если она не будет постоянной. Так как все указатель на char* - это по сути указатель на первый элемент массива, а строка "fff" имеет тип const char [4], тоесть получается несоответствие типов! Это неверно для C/C++. Все строки нужно объявлять как const char*
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.01.2018, 21:49
Привет! Вот еще темы с ответами:

friend указатель - C++
Есть ли что-то типа этого в стандарте: class A { protected: double a; public: typedef double (*td) (double x); td a; ...

Указатель на пользовательский тип - C++
Чёто туплю, почему когда передаёшь переменную (например int) параметром через адрес в функцию (параметр - указатель на этот тип), то в теле...

Умный указатель ComPtr - C++
Равноценна ли запись с простым указателем #include <d3d11_1.h> ID3D11Device *device_11_0 = nullptr; ID3D11Device1 *device_11_1 =...

Указатель на метод класса. - C++
Программа отказывается присваивать метод класса указателю. Как исправить? test.cpp: In function ‘int main()’: test.cpp:66: error:...


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

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

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