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

Здесь необходимы круглые скобки, потому


          int field;

C

} Rec_Type;

 typedef Rec_Type Array_Type[ 100];

Array_Type *ptr;

ptr                                        /* Указатель на массив записей с целочисленным полем */

*ptr                                     /* Массив записей с целочисленным полем */

(*ptr)[78]                            /* Запись с целочисленным полем */



(*ptr)[78].field                    /* Целочисленное поле */

Здесь необходимы круглые скобки, потому что индексация массива имеет бо­лее высокий приоритет, чем раскрытие указателя. В сложной структуре дан­ных это может внести путаницу при расшифровке декомпозиции, которая ис­пользует разыменование как префикс, а индексацию и выбор поля как пост­фикс. К счастью, наиболее часто используемая последовательность операций, в которой за разыменованием следует выбор поля, имеет специальный, про­стой синтаксис. Если ptr указывает на запись, то ptr->field — это краткая за­пись для (*ptr).field.

    Синтаксис Ada основан на предположении, что за разыменованием почти всегда следует выбор поля, поэтому отдельная запись для разыменования не нужна. Вы не можете сказать, является R.Field просто выбором поля обычной записи с именем R, или R — это указатель на запись, который раскрывается перед выбором. Хотя такой подход и может привести к путанице, но он имеет то преимущество, что в структурах данных мы можем перейти от использования самих записей к использованию указателей на них без других изменений программы. В тех случаях, когда необходимо только разыменова­ние, используется довольно неуклюжий синтаксис, как показывает вышеупо­мянутый пример на языке Ada:

type Rec_Type is

     record

Ada

           Field: Integer;

     end record;

type Array_Type is array( 1 .. 100) of Rec_Type;

type Ptr_Type is access Array_Type;

Ptr: Ptr_Type;

Ptr                                      -- Указатель на массив записей с целочисленным полем

Ptr.all                                -- Массив записей с целочисленным полем


Содержание раздела