Объявление указателей в C ++ - PullRequest
11 голосов
/ 30 апреля 2010

В C ++ какая разница между char const *ptr=&ch; а также const char *ptr=&ch;

Ответы [ 5 ]

32 голосов
/ 30 апреля 2010

Они одинаковы, т.е. pointer to const char.

Однако char * const ptr отличается от , будучи const pointer to (non-const) char.

И просто для завершения набора, const char * const ptr это const pointer to const char.

7 голосов
/ 30 апреля 2010

Нет разницы в C ++.

Важно const до * или после *.

6 голосов
/ 30 апреля 2010

Const применяется ко всему, что находится непосредственно слева (кроме случаев, когда там ничего нет, в этом случае оно применяется ко всему, что непосредственно справа). Так что разницы нет.

char * const ptr будет постоянным указателем на значение переменной.

2 голосов
/ 30 апреля 2010

Другие ответы касались технического решения - ваши два примера совпадают.

Многие люди предпочитают читать справа налево при работе с const в C ++. В английском языке нам нравится думать о константе X, в то время как C ++ любит анализировать X const. Чтение справа налево приводит к большему английскому результату.

Довольно экстремальный пример:

C const * bar(A * const, B const * const) const;

Справа налево это читается как 'постоянная функция bar, принимающая в качестве параметров постоянный указатель на A и постоянный указатель на постоянную B, возвращающий указатель на константу C'. Обратите внимание, что все три вида указателей различны.

0 голосов
/ 30 апреля 2010

char const *ptr=&ch; и const char *ptr=&ch; означает, что char является константой, где указатель является переменным (или его можно изменить).

Но в случае char * const ptr вы не можете переназначить указатель после его установки. так что это константный указатель на строку символов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...