Инициализация массивов.
Очень важно уметь инициализировать массивы, т.е. присваивать элементам массива некоторые начальные значения. В языке С для этого имеются специальные возможности. Самый простой способ инициализации следующий: в процессе объявления массива можно указать в фигурных скобках список инициализаторов:
float farr[6]={1.1, 2.2, 3.3, 4.0, 5, 6};
int a[3][5]={1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};
В другом случае такая форма записи эквивалентна набору операторов:
a[0][0]=1 a[0][1]=2 a[0][2]=3 a[0][3]=4
a[0][4]=5 a[1][0]=6 a[1][1]=7 a[1][2]=8, и т.д.
Многомерные массивы, в том числе и двумерные массивы, можно инициализировать, рассматривая их как массив массивов.
Инициализации
int a[3][5]={1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};
и
int a[3][5]={{1, 2, 3, 4, 5}, {6, 7, 8, 9, 10}, {11, 12, 13, 14, 15}};
эквивалентны. Количество инициаторов не обязано совпадать с количеством элементов массива. Если инициализаторов меньше, то оставшиеся значения элементов массива не определены.
В то же время инициализации
int a[3][5]={1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11};
и
int a[3][5]={{1, 2, 3}, { 4, 5, 6, 7, 8}, {9, 10, 11}};
различны. Соответствующие массивы будут заполнены следующим образом:
В первом случае |
|
Во втором случае |
||||||||
1 |
2 |
3 |
4 |
5 |
|
1 |
2 |
3 |
|
|
6 |
7 |
8 |
9 |
10 |
|
4 |
5 |
6 |
7 |
8 |
11 |
|
|
|
|
|
9 |
10 |
11 |
|
|
В пустых клеточках значения не определены .
Символьные массивы могут инициализироваться как обычный массив:
char str[15]={‘B’, ‘o’, ‘r’, ‘l’, ‘a’, ‘n’, ‘d’, ‘’, ‘C’, ‘+’, ‘+’};
а могут – как строка символов:
char str[15]=”Borland C++”;
Отличие этих двух способов состоит в том, что во втором случае будет еще добавлен нулевой байт. К тому же второй способ короче.
Допускается также объявление и инициализация массива без явного указания размера массива. Например, для выделения места под символьный массив обычным способом
char str[80]=”Это объявление и инициализация массива символов”;
но, необходимо сосчитать количество символов в строке или указать заведомо больший размер массива.
При инициализации массива без указания его размера
char str[ ]=”Это объявление и инициализация массива символов”;
компилятор сам определит необходимое количество элементов массива, включая нулевой байт. Можно объявлять таким же способом массивы любого типа:
int mass[ ]={1, 2, 3, 1, 2, 3, 4};
и многомерные массивы. При объявлении массивов с неизвестным количеством элементов можно не указывать размер только в самых левых квадратных скобках:
int arr[ ][3]={1, 2, 3,
5, 6, 7,
8, 9, 0 };
В качестве примера использования массивов можно привести метод сортировки элементов массива:
#include<stdio.h>
void main( )
{
int arr[10]={1, 23, 4, 7, 8, 0, 1, 9, 4, 7};
int i, j, tmp;
printf("Неотсортированный массив: ");
for(i=0; i<10; i++) printf("%d ", arr[i]);
printf("\n");
for(i=0; i<9; i++)
for(j=0; j<9; j++) if(arr[j] < arr[j+1])
{
tmp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = tmp;
}
printf("");
for(i=0; i<10; i++) printf("%d ", arr[i]);
printf("\n");
}