Огромные и дальние указатели не являются частью стандарта C. Они являются расширениями borland для языка C для управления сегментированной памятью в DOS и Windows 16/32bit. Функционально, что говорит декларация ** p, является символом. Это означает, что «разыменования р, чтобы получить указатель на символ, разыменования, что, чтобы получить символ»
Для того, чтобы понять, C указатель описателя семантика попробовать это выражение вместо:
int* p;
Это означает, что р является указателем внутр. (подсказка: читать справа налево)
int* const p;
Это означает, что р константный указатель на Int. (Так что вы не можете изменить значение р) Вот доказательство того, что:
p= 42; // error: assignment of read-only variable ‘p’
Другой пример:
int* const* lol;
Это означает, лол указатель на константный указатель на Int. Таким образом, указатель, на который указывает lol, не может указывать на другой int.
lol= &p; // and yes, p cannot be reassigned, so we are correct.
В большинстве случаев чтение справа налево имеет смысл. Теперь прочитайте выражение в вопросе справа налево:
char huge * far *p;
Теперь огромный и далеко только поведение спецификаторы для указателей, созданных Борланд. Что это на самом деле означает
char** p;
«р является указателем на указатель на символ»
Это означает, что все, что р указывает на, указывает на символ.
'огромный' и' far' являются нестандартными анахронизмами - просто подумайте об этом как 'char ** p;' –
Спасибо за комментарий Paul. 'почему * p - дальний указатель, а p - огромный указатель ... его сбивает с толку. – dotslash
Я ясно понимаю, что ** p - переменная данных типа char. – dotslash