1. В случае полной инициализации указывается полный список значений в фигурных скобках.
int A[4] = {1, 4, 2, 6};
Размеры массивов при полной инициализации можно не указывать. Компилятор сам для себя определит эти размеры и выделит соответствующую память. Программист может найти размеры с помощью операции sizeof. Операция возвращает размер всего, что угодно в байтах. В частности, sizeof(A) возвращает размер массива в байтах. Например,
int A[] = {1, 4, 2, 6};
int Dim = sizeof(A)/ sizeof(int); // 8/2=4
Лучше писать
int Dim = sizeof(A)/ sizeof(A[0]); // 8/2=4
2. В случае частичной инициализации указывается размер массива и неполный список значений в фигурных скобках. Неинициализированные элементы получают нулевые значения. В случае
int A[4] = {1, 4};
элементы A[0] и A[1] получили значения, а в A[2] и A[3] записаны нули.
Если список инициализации больше размера массива, то возникнет ошибка компиляции.
// int A[4] = {1, 4, 4, 7, 2}; Ошибка
Двумерные массивы
1. В случае полной инициализации указывается полный список значений в фигурных скобках. Каждая строка инициализируется в своих фигурных скобках.
|
|
int A[3][4] ={ {1, 4, 2, 6},
{11, 1 4, 1 2, 1 6},
{1, 4, 2, 6}
};
Первый размер массива, то есть количество строк, при полной инициализации можно не указывать.
int A[][4] ={ {1, 4, 2, 6},
{11, 1 4, 1 2, 1 6},
{1, 4, 2, 6}
};
Компилятор сам для себя определит количество по списку инициализации. Программист может найти первый размер с помощью операции sizeof. В частности, sizeof(A) возвращает размер двумерного массива в байтах, а sizeof(A[0]) возвращает размер строки в байтах. Например,
int KolStrok = sizeof(A)/ sizeof(A[0]); // 24/82=3
2. В случае частичной инициализации указываются все размеры массива и неполные списки значений в фигурных скобках.
int A[4][4] ={ { 2, 6},
{ 1 4, 1 2, 1 6},
{6}
};
Если размер список инициализации больше хотя бы одного размера массива, то возникнет ошибка компиляции.
// int A[2][4] = {{1, 4, 4, 7, 2},
{1, 4, 4, 2}}; Ошибка
Внимание. Допускается инициализация двумерного массива одной парой фигурных скобок
int A[2][4] = { 1, 4, 4, 7, 2, 1, 4, 4, 2};
Но такой способ чреват логической ошибкой в случае частичной инициализации.
Внимание. При определении массива без инициализации все размеры надо указывать явным образом.
Тип имени массива
Для одномерных массивов типом имени массива является тип_элемента_массива[]
Примеры.
Имя А массива char A[20]; имеет тип char[].
Имя В массива float B[10] имеет тип float[].
Для двумерных массивов типом имени массива является тип_элемента_массива[][размер].
В типе имени массива нет информации о первом размере массива – о количестве строк.
Примеры.
Имя А массива char A[10][20]; имеет тип char[][20].
Имя B массива char B[100][20] тоже имеет тип char[][20].
Имя C массива char C[20][10] имеет тип char[][10], отличный от типов А и В.