в том, что структура данных
Преимущество общего синтаксиса в том, что структура данных может быть первоначально реализована как массив, а позже, если понадобится более сложная структура данных, массив может быть заменен функцией без изменения формы обращения. Квадратные скобки вместо круглых в языках Pascal и С применяются в основном для облегчения работы компилятора.
Записи и массивы могут вкладываться друг в друга в произвольном порядке, что позволяет создавать сложные структуры данных. Для доступа к отдельному компоненту такой структуры выбор поля и индексация элемента должны выполняться по очереди до тех пор, пока не будет достигнут компонент:
typedef int A[1 0]; /* Тип массив */
C |
А а; /* Массив внутри записи */
char b;
} Rec;
Rec r[10]; /* Массив записей с массивами типа int внутри */
int i,j,k;
k = r[i+l].a[j-1]; /* Индексация, затем выбор поля,затем индексация */
/* Конечный результат — целочисленное значение */
Обратите внимание, что частичный выбор и индексация в сложной структуре данных дают значение, которое само является массивом или записью:
C |
r[i] Запись, содержащая массив целых чисел
r[i].a Массив целых чисел
r[i].a[j] Целое
и эти значения могут использоваться в операторах присваивания и т.п.
5.3. Массивы и контроль соответствия типов
Возможно, наиболее общая причина труднообнаруживаемых ошибок — это индексация, которая выходит за границы массива:
inta[10],
C |
i<= 10; i
a[i] = 2*i;
Цикл будет выполнен и для i = 10, но последним элементом массива является а[9].