Массив – это совокупность переменных одного типа, к которым обращаются с помощью общего имени. Доступ к отдельному элементу массива может осуществляться с помощью индекса. В С все массивы состоят из соприкасающихся участков памяти. Наименьший адрес соответствует первому элементу. Наибольший адрес соответствует последнему элементу. Массивы могут иметь одну или несколько размерностей.
Массивы тесно связаны с указателями.
Одномерный массив
Стандартный вид объявления одномерного массива следующий:
тип имя_переменной[размер];
В С массивы должны определяться однозначно, чтобы компилятор мог выделить под них место в памяти. Здесь тип определяет базовый тип массива и является типом каждого элемента массива. Параметр размер определяет, сколько элементов содержит массив. В одномерном массиве полный размер массива в байтах вычисляется следующим образом:
общее число байт = sizeof (базовый тип)*число элементов
У всех массивов первый элемент имеет индекс 0. Поэтому, если написать
char p[10];
то будет объявлен массив символов из 10 элементов, причём эти элементы адресуются индексом от 0 до 9. Следующая программа загружает целочисленный массив числами от 0 до 9 и выводит его:
#include <stdio.h>
int main(void)
{
int x[10];
int t;
for(t=0; t<10; ++t) x[t] = t;
for(t=0; t<10; ++t) printf(“%d ”, x[t]);
return 0;
}
В С отсутствует проверка границ массивов. Можно выйти за один конец массива и записать значение в какую-либо переменную, не относящуюся к массиву, или даже в код программы. Работа по предоставлению проверки границ возлагается на программиста.
Создание указателя на массив
Можно создать указатель на первый элемент массива, указав имя массива без индекса. Пусть имеется
int sample[10];
Можно создать указатель на первый элемент, используя имя sample. Следовательно, следующий фрагмент присваивает переменной p адрес первого элемента sample:
int *p;
int sample[10];
p = sample;
Можно также получить адрес первого элемента массива с помощью оператора &. Например, sample и &sample[0] приводят к одинаковому результату. Тем не менее в профессиональных программах нет почти нигде &sample[0].