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

Скачать в pdf «Язык программирования C»


Как точка, так и знак — > анализируются при компиляции слева направо. Пусть объявлены следующие структура и указатель: struct rect г, *гр = &г;


Тогда следующие четыре выражения эквивалентны: г.ptl.х rp->ptl.х (г.ptl).х (rp->pt1).X


Операции обращения к структурам (точка и — >) наряду с круглыми скобками для вызовов функций и квадратными для индексов массивов находятся на самой вершине иерархии приоритетов, а потому применяются к своим аргументам всегда в первую очередь. Пусть имеется объявление:


struct {


int len; char *str;


} *p;


Тогда выражение ++p->len инкрементирует len, а не p. По умолчанию скобки в нем расставляются следующим образом: ++(р->1еп).С помощью скобок можно изменить порядок применения операций: выражение (++р) ->1еп инкрементирует р до обращения к len, а (р+ + )->1еп инкрементирует его после обращения. (В последнем случае скобки не обязательны.)


Аналогично, выражение *p->str дает значение, на которое указывает str; *p->str++ инкрементирует str после обращения к тому, на что указывает это поле (как и *s++); (*p->str)++ инкрементирует то, на что указывает str; наконец, *p+ + ->str инкрементирует р после обращения к данным, на которые указывает str.

6.3. Массивы структур


Напишем программу, подсчитывающую, сколько раз встречается в исходных данных каждое ключевое слово языка С. Для этого понадобится массив символьных строк, содержащих эти слова, и массив целых чисел для результатов подсчета. Один из возможных подходов — организовать два параллельных массива keyword и keycount:


char *keyword[NKEYS]; int keycount[NKEYS];


Но сам факт, что эти массивы параллельны и взаимосвязаны, наводит на мысль о другой организации данных — массиве структур. Каждое ключевое слово и количество этих слов в тексте образуют взаимосвязанную пару: char *word; int count;

Скачать в pdf «Язык программирования C»