|
||||
|
2.3.3 Производные Типы Другие типы можно выводить из основных типов (и типов, определенных пользователем) посредством операций описания: * указатель amp; ссылка [] вектор () функция и механизма определения структур. Например: int* a; float v[10]; char* p[20]; // вектор из 20 указателей на символ void f(int); struct str (* short length; char* p; *); Правила построения типов с помощью этих операций подробно объясняются в #с.8.3-4. Основная идея состоит в том, что описание производного типа отражает его использование. Например: int v[10]; // описывает вектор i = v[3]; // использует элемент вектора int* p; // описывает указатель i = *p; // использует указываемый объект Вся сложность понимания записи производных типов проистекает из того, что операции * и amp; префиксные, а операции [] () постфиксные, поэтому для формулировки типов в тех случаях, когда приоритеты операций создают затруднения, надо использовать скобки. Например, поскольку приоритет у [] выше, чем у *, то 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; Мнение автора таково, что подобные конструкции делают программу менее удобочитаемой, и их следует избегать. |
|
||