Бьерн Страуструп - Язык программирования С++. Главы 2-4
Страница 10. Производные типы



2.3.3  Производные типы

Исходя из основных (и определенных пользователем) типов, можно с
помощью следующих операций описания:

     *     указатель
     &     ссылка
     []    массив
     ()    функция

а также с помощью определения структур, задать другие, производные типы.
Например:

     int* a;
     float v[10];
     char* p[20];   // массив из 20 символьных указателей
     void f(int);
     struct str { short length; char* p; };

Правила построения типов с помощью этих операций подробно объяснены
в $$R.8. Ключевая идея состоит в том, что описание объекта производного
типа должно отражать его использование, например:

     int v[10];     // описание вектора
     i = v[3];      // использование элемента вектора

     int* p;        // описание указателя
     i = *p;        // использование указуемого объекта

Обозначения, используемые для производных типов, достаточно трудны
для понимания лишь потому, что операции * и & являются префиксными, а
[] и () - постфиксными. Поэтому в задании типов, если приоритеты
операций не отвечают цели, надо ставить скобки. Например, приоритет
операции [] выше, чем у *, и мы имеем:

    int* v[10];        // массив указателей
    int (*p)[10];      // указатель массива

Большинство людей просто запоминает, как выглядят наиболее часто
употребляемые типы.
Можно описать сразу несколько имен в одном описании. Тогда оно содержит
вместо одного имени список отделяемых друг от друга запятыми
имен. Например, можно так описать две переменные целого типа:

     int x, y;    // int x; int y;

Когда мы описываем производные типы, не надо забывать, что операции
описаний применяются только к данному имени (а вовсе не ко всем
остальным именам того же описания). Например:

    int* p, y;        // int* p; int y; НО НЕ int* y;
    int x, *p;        // int x; int* p;
    int v[10], *p;    // int v[10]; int* p;

Но такие описания запутывают программу, и, возможно, их следует
избегать.

 
« Предыдущая статья   Следующая статья »