Массив состоит из нескольких элементов одного и того же типа. Можно выбирать любой элемент массива. Для этого необходимо задать индекс, который указывает относительную позицию элемента. число элементов массива задается при его объявлении и в дальнейшем не меняется. Если массив объявлен, к любому его элементу можно обратиться следующим образом: указать имя массива и индекс его элемента в квадратных скобках.
Массивы объявляются так же, как и переменные. Например:
int a[100];
float c[10][20];
В первой строке объявляем массив а из 100 элементов целого типа: а[0],a[1], … ,a[99] (индексация всегда начинается с нуля). Во второй строке объявлен двумерный массив вещественного типа. Двумерный массив представляется как одномерный, элементы которого являются тоже массивами. В первых квадратных скобках указывается количество строк в массиве, во вторых – количество столбцов.
Указатели и одномерные массивы.
Указатель – это переменная, которая содержит адрес переменной. Так как указатель – это адрес некоторого объекта, то через него можно обращаться к данному объекту.
В СИ существует тесная связь между указателями и массивами. Любой доступ к элементу массива, осуществляемый операцией индексирования, может быть выполнен при помощи указателя.
Для передачи массива указателей в функцию используется тот же метод, что и для любого другого массива: имя массива без индекса записывается как формальный параметр функции.
Массивы указателей часто используются при работе со строками.
1. Одномерный массив
// заполнение элементов массива
int num[10];
for (int i=0;i<10;i++)
{
*(num+i)=i; // обращение к элементу массива через указатель
printf("%i\n",*(num+i));
}
Прибавление к указателю целого числа приводит к смещению адреса, на который указывает указатель, на число позиций слагаемого.
2. Двумерный массив
// заполнение элементов массива
int num[3][3];
for (int i=0;i<3;i++)
for (int j=0;j<3;j++)
{
*(*(num+i) +j)=i+j; (адрес)
// *(num[i]+j)=i+j; // num[i]- адрес начала i-той строки
printf("%i;\n",*(*(num+i)+j));
}
3. Использование дополнительного указателя
int num[3];
int *p;
p=num;// присвоение адреса начала массива указателю p
for (int i=0; i<3;i++,p++) // используется операция “,”
//адрес увеличивается на 4 байта
{
*p=i;// заполнение массива
printf("%i;\n",*p);
}
int arr[]={5,10,15,20,25}
int *ptr=arr; // или ptr=&arr[0];
int a=ptr[3];
Имя массива – это адрес памяти, начиная с которого расположен массив.