Что такое массив. Общая форма объявления массивов
Массив —это упорядоченная последовательность величин, обозначаемая
одним именем.
Общая форма объявления массива:
Тип имя [размер массива];
Пример
float data[245];
Каким образом связаны массивы и указатели
В ряде случаев операции с массивами можно свести к операции с указателями
Форма обращения к элементам массива с помощью указателей следующая:
• data[0] == *p1;
• data[1] == *(p1+1);
• data[2] == *(p1+2);
• …,
• data[i] == *(p1+i);
• …,
• data[n-1] == *(p1+n-1).
Операции над указателями p1 и p2:
• p1 == p2 — проверка на равенство;
• p1 != p2 — проверка на неравенство;
• p1 < p2 — сравнение указателей на меньше;
• p1 <= p2 — сравнение указателей на меньше или равно;
• p1 > p2 — сравнение указателей на больше;
• p1 >= p2 — сравнение указателей на больше или равно;
• p1 - p2 — вычисление количества элементов между p1 и p2;
• p1 + i — наращивание указателя на i элементов;
• p1 - i — уменьшение значения указателя на i элементов.
Пример. Связь между указателями и именами массивов
#include <stdio.h>
main()
{
int i;
float data [5], *p;
printf("\n Начальный адрес массива data - %u .", data);
printf("\n Адрес элемента массива data[0] - %u .",
&data[0]);
printf("\n Адрес третьего элемента массива - %u .",
&data[3]);
p=data; /* p= & data [0]; */
for ( i=0; i<=4; i=i+1)
{
printf("\n Адрес %d-го элемента массива data равен
%u .", p+i);
printf("\n Значение %d-го элемента массива data
равно %f .", &data[i]);
}
}
Способы инициализации массивов
Существует два способа инициализации массива:
1. Указание начальных значений при объявлении массива.
2. Организация цикла последовательного ввода значений элементов массива.
Общая форма инициализации массива при объявлении
тип имя [n]={значение1,
значение2,
значение3,
...,
значениеn};
26. Каким образом осуществляется передача массива в функцию. Проиллюстрировать примером.
Обработку массивов удобно организовывать с помощью специальных
Функций. Если функции передается массив, то на самом деле внутрь функции
попадает только адрес массива. Фактически в функцию передаются: 1) адрес
массива, 2) размер массива. Исключение составляют функции обработки строк, в
которые передаются только адреса.
Рассмотрим пример программы, в которой функция modify() увеличивает
На 1 значение каждого элемента массива data.
#include <stdio.h>
void modify (int * a, int size)
{
int i;
for (i=0; i<= size, i++)
*(a+i) =*(a+i) + 1;
/* a[i] = a[i]+1;*/
}
main()
{ int data[]= {-12,14,-10,16,22};
int i;
printf("\n Исходный массив: ");
for (i=0; i<=4; i++)
printf("\n data[%d] =%d", i,data[i]);
modify(data, 4); 44
printf("\n Модифицированный массив: ");
for(i=0; i<=4; i++)
printf("\n data[%d]=%d", i, data[i]);
}
27. Понятие многомерного массива : форма объявления , расположения в памяти ЭВМ , для чего применяются.
В языке Си массивы бывают не только одномерные, но и многомерные.
Отличие состоит в том, что в одномерном массиве положение элемента
определяется одним индексом, а в многомерном — несколькими.
Общая форма объявления многомерного массива
тип имя_массива [индекс_1]
[индекс_2]
.....
[индекс_n];
Элементы многомерного массива располагаются в последовательных ячейках
оперативной памяти по возрастанию адресов. Между элементами нет разрывов. В
памяти ЭВМ элементы располагаются построчно таким образом, что быстрее всего
меняется последний индекс.
Приример расположения в памяти ЭВМ двухмерного массива int d[3][4]
d[0][0] d[0][1] d[0][2] d[0][3]
d[1][0] d[1][1] d[1][2] d[1][3]
d[2][0] d[2][1] d[2][2] d[2][3]
Пример расположения в памяти ЭВМ трехмерного массива int d[2][2][2]
d[0][0][0] d[0][0][1]
d[0][1][0] d[0][1][1]
d[1][0][0] d[1][0][1]
d[1][1][0] d[1][1][1]
Применение двухмерных массивов. Двумерные массивы, как правило,
отождествляются с матрицами, поэтому типовыми задачами, в которых
применяются двухмерные массивы, являются задачи с матрицами:
транспонирование матриц, вычисление определителя, определение средних
значений матрицы и так далее.
Понятие динамического выделения памяти, формат функции malloc(), преимущества динамического выделения памяти.
Malloc -функция динамического распределения памяти.
Описание функции malloc(). Функция malloc() динамически распределяет
блок памями размером size байт. Возвращаемое значение — указатель на
выделенную область памяти.
Динамическое выделение памяти под массивы. Преимущества динамического выделения, графическое представление выделения памяти под одномерный массив.