Языки программирования - концепции и принципы

Форма записи адреса будет зависеть


Форма записи адреса будет зависеть от архитектуры компь­ютера. Например, компьютер Intel 8086 использует два 16-разрядных слова, которые объединяются при формировании 20-разрядного адреса. Разумно предположить, что все указатели представляются единообразно.

   Однако в программировании полезнее и надежнее использовать типизи­рованные указатели, которые объявляются, чтобы ссылаться на конкретный тип, такой как тип int в приведенном выше примере. Указуемый объект *ptr должен иметь целый тип, и после разыменования его можно использовать в любом контексте, в котором требуется число целого типа:

inta[10];

a[*ptr] = a[(*ptr) + 5]; /* Раскрытие и индексирование */

a[i] = 2 * *ptr; /* Раскрытие и умножение */

Важно делать различие между переменной-указателем и указуемым объек­том и быть очень осторожными при присваивании или сравнении указате­лей:

int i1 = 10;





C

int i2 = 20;

int *ptr1 = &i1;                             /* ptrl указывает на i1 */

int *ptr2 = &i2;                             /* ptr2 указывает на i2 */

*ptr1 = *ptr2;                                /* Обе переменные имеют одно и то же значение */

if(ptr1 == ptr2)...                           /* «Ложь», разные указатели */

if (*ptr1 == *ptr2)                         /* «Истина», обозначенные объекты равны */

ptrl = ptr2;                                     /* Оба указывает на i2 */



На рисунке 8.2а показаны переменные после первого оператора присваива­ния: благодаря раскрытию указателей происходит присваивание указуемых объектов и i1 получает значение 20. После выполнения второго оператора присваивания (над указателями, а не над указуемыми объектами) перемен­ная i1 больше не является доступной через указатель, что показано на рис. 8.26.

    Важно понимать различие между указателем-константой и указателем на константный указуемый объект.

Содержание  Назад  Вперед