какая структура данных указана для указателя? - PullRequest
0 голосов
/ 11 января 2019

Почему только переменная-указатель может содержать адрес любой другой переменной? Если мы храним адрес любой переменной в простой переменной, то ее адрес сохраняется как значение. Какая структура данных предназначена для переменной указателя?

1 Ответ

0 голосов
/ 11 января 2019

Полагаю, вы упускаете из виду тот факт, что указатель также является типом , отдельным, как стандартные целочисленные типы, плавающие типы и т. Д.

Цитата C11, глава §6.2.5

  • Тип указателя может быть получен из типа функции или типа объекта, называемого ссылочный тип. Тип указателя описывает объект, значение которого предоставляет ссылку к объекту ссылочного типа. Тип указателя, полученный из ссылочного типа T иногда называется «указатель на T». [...]

Этот тип предназначен для хранения адреса другого типа (включая сам тип указателя). Точно так же как int предназначен для хранения целочисленных значений и double или float для значений с плавающей запятой. Не существует отдельной структуры данных , необходимой или обязательной для типов указателей, просто определено, что она может содержать адрес как значение переменной указателя.

FWIW, в заголовке stdint.h определены другие типы, которые могут содержать адрес в качестве значения:

Следующий тип обозначает целочисленный тип со знаком со свойством, которое любое допустимое указатель на void может быть преобразован в этот тип, затем преобразован обратно в указатель на void, и результат будет сравниваться равным исходному указателю:

intptr_t

Следующий тип обозначает целочисленный тип без знака со свойством, которое любое допустимое указатель на void может быть преобразован в этот тип, затем преобразован обратно в указатель на void, и результат будет сравниваться равным исходному указателю:

uintptr_t

Эти типы являются необязательными.

О возможном использовании см. Что такое intptr_t?

...