Что такое pointee и каков его тип?

#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);
}