Язык программирования C



         

Смысл описателей - часть 2


int i, *ip, f(), *fip(), (*pfi)();

в котором описывается целое i, указатель ip на целое, функция f, возвращающая целое, функция fip, возвращающая указатель на целое, и указатель pfi на функцию, которая возвращает целое. Особенно полезно сравнить два последних описателя. Связь в *fip() можно представить в виде *(fip()), так что описанием предполагается, а такой же конструкцией в выражении требуется обращение к функции fip и последующее использование косвенной адресации для выдачи с помощью полученного результата (указателя) целого. В описателе (*pfi)() дополнительные скобки необходимы, поскольку они точно так же, как и в выражении, указывают, что косвенная адресация через указатель на функцию выдает функцию, которая затем вызывается; эта вызванная функция возвращает целое.

В качестве другого примера приведем описание

float fa[17], *afp[17];

в котором описывается массив чисел типа float и массив указателей на числа типа float. Наконец,

static int x3d[3][5][7];

описывает статический трехмерный массив целых размером 3*5*7. Более подробно, x3d является массивом из трех элементов; каждый элемент является массивом пяти массивов; каждый последний массив является массивом из семи целых. Каждое из выражений x3d, x3d[i], x3d[i][j] и x3d[i][j][k] может разумным образом появляться в выражениях. Первые три имеют тип "массив", последнее имеет тип int.




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