c ++ const для указателя на указатель - PullRequest
1 голос
/ 07 ноября 2019

указатель на константу int. Я могу изменить указатель, но не могу изменить значение:

const int* a;

постоянный указатель на int. Я не могу изменить указатель, но я могу изменить значение переменной:

int* const a;

Теперь, как все выглядит, если я имею дело с указателем на указатель?

int** a;

как мне:

а) объявить константный указатель на неконстантный указатель на неконстантный int

b) объявить неконстантный указатель на константный указатель наnon-const int

c) объявить неконстантный указатель на неконстантный указатель на const int?

Ответы [ 2 ]

1 голос
/ 07 ноября 2019

а) объявить указатель const на не- const указатель на не- const int

int ** const a = nullptr;

Обратите внимание, что, поскольку указательвыше const -качественный, он должен быть инициализирован при объявлении. В противном случае он не будет скомпилирован.

b) объявить не const указатель на const указатель на не- const int

int * const *b;   

c) объявить не const указатель на не const указатель на const int

const int **c;

для указателя const:

T * const ptr; // const pointer to T

и для указателя, отличного от const:

T * ptr; // non-const pointer to T

Затем выберите соответствующий шаблон выше для внешнего указателя изамените T соответственно на самый внутренний указатель (т. е. на самый глубокий указатель в типе):

  • Не const указатель на не const int: T = int *.
  • const указатель на не- const int: T = int * const.
  • не- const указатель на const int: T = const int *.
0 голосов
/ 07 ноября 2019

Все дело в том, где const находится относительно *: если const слева, то на что указывает const, если const справа от *, точто указывает const.

...