Массив объявляется одним из следующих способов:
типидентификатор[константное выражение];
типидентификатор[] = { список элементов };
Элементы списка перечисляются через запятую, в этом случае размерность массива определяется по фактически указанному количеству элементов. Примеры:int x[10];float a[]={3.5,4.5,5.5}; //размерность=3char div[3]={' ','\n','\t'};Элементы массивов в Си всегда нумеруются с нуля.Синтаксис индексного выражения для обращения к элементу массива имеет следующий вид:
выражение1[выражение2]
Значение индексного выражения находится по адресу, который вычисляется как сумма значений выражения1 и выражения2. Выражение1 должно иметь тип указателя на некоторый тип, например, быть идентификатором массива, а выражение2, заключенное в квадратные скобки, должно иметь целый тип или преобразовываться к нему.Индексное выражение может иметь более одного индекса, что соответствует многомерному массиву. Синтаксис такого выражения следующий:
выражение1[выражение2][выражение3]…
Такое индексное выражение интерпретируется слева направо. Сначала вычисляется самое левое индексное выражение — выражение1[выражение2]. С адресом, полученным в результате сложения выражения1 и выражения2, складывается (по правилам сложения указателя и целого) выражение3 и т. д. Выражение2 и последующие выражения имеют целый тип.Элементы многомерного массива запоминаются построчно. Примеры:char а[2][3];
float matrix[10][15];
int b[3][3]={
{1,2,3},
{4,5,6},
{7,8,9}
};
В следующем примере выполняется определение, обработка и печать статической матрицы.
#include <stdio.h>
void main () {
int b[3][3]={
{1,2,3},
{1,2,3},
{1,2,3}
};
b[0][0]=2;
b[2][2]=b[0][0]*4;
for (int i=0; i<3; i++) {
printf ("\n");
for (int j=0; j<3; j++)
printf ("%d ",b[i][j]);
}
}
Пример ниже выполняет подсчет количества разных цифр, пробелов и остальных символов, вводимых с клавиатуры. Для завершения программы служит ввода символа EOF (<Ctrl>+<Z>). Преобразование кода символа c в целочисленный индекс элемента массива ndigit выполняется конструкцией c-'0'.#include <stdio.h>void main() { int c, i, nwhite, nother; int ndigit[10]; nwhite = nother = 0; for (i = 0; i < 10; ++i) ndigit[i] = 0; while ((c = getchar())!= EOF) if (c >= '0' && c <= '9') ++ndigit[c-'0']; else if (c==' ' || c=='\n' || c=='\t') ++nwhite; else ++nother; printf("digits ="); for (i = 0; i < 10; i++) printf(" %d", ndigit[i]); printf("\nwhite space = %d, other = %d\n", nwhite, nother);}