#c #pointers #pointee
#c #указатели #pointee
Вопрос:
Например, давайте рассмотрим этот C-код:
int x;
const int *p = amp;x;
p
теперь это неконстантный указатель на const int . Но каков тип pointee? Это int
или const int
? Я искал, но не нашел точного определения.
Просто чтобы избежать путаницы, const int *p
означает, что p является указателем на const int
while int * const p
означает, что p является постоянным указателем на int .
Я нашел это:
Существительное
pointee (множественное число pointees)
(вычисления) Данные или объект, на которые ссылается указатель.
Но это недостаточно точно, чтобы ответить на вопрос о типе pointee.
Комментарии:
1. Хммм … (эффективный ) тип указателя
const int
… и базовый типint
указателя. Возможно, в соответствующем C11 6.2.5p20 обсуждаются «производные типы»
Ответ №1:
Указатель — это объект, на который указывает указатель. В этом случае указатель x
имеет тип int
.
Подумайте об этом так: p
это постоянный «просмотр» объекта x
, p
который вы можете только читать x
, но это не меняет того факта, что x
он изменяемый.
В любом случае, не слишком переживайте по этому поводу. «Pointee» — это не слишком часто используемая терминология, и я даже сомневаюсь, что она определена в стандарте.
Ответ №2:
Тип указателя p — это то, что осталось от p: const int *
. Тип указателя — это то, что осталось от *p: const int
. В программе вы должны прокомментировать const , чтобы иметь возможность изменять указатель:
#include "stdio.h"
main()
{
int i = 42;
/* const */ int *p = amp;i;
*p = 43;
printf("i: %d", i);
}