Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Антонюк и др.doc
Скачиваний:
49
Добавлен:
07.11.2018
Размер:
32.99 Mб
Скачать
    1. Массивы и указатели. Работа с файлами. Объявления массивов и указателей.

Массив представляет собой набор данных одного типа. Формат определения массива следующий:

тип_данных имя_массива[размер_массива];

Например, для представления данных о температуре можно воспользоваться следующим описанием:

int Temperatura[7];

Массив можно инициализировать во время определения:

int Temperatura[7]={ 20, 21, 17,16,27,22,19};

Если массив инициализируется, то его размер можно не указывать, например:

char Error[]=”Ошибка, файл не найден!”;

Многомерные массивы задаются указанием нескольких размеров, каждый из которых заключен в квадратные скобки:

double koordinate[8][2];

Такое описание определяет таблицу, содержащую два столбца и 8 строк.

При инициализации таких массивов можно не указывать только размер самого левого индекса:

int iarray[][3]={ {1,2,3},{9,11,4},{100,200,300}};

Многомерные массивы хранятся в памяти компьютера последовательно. Они группируются в порядке индексов, от правого к левому. В предыдущем примере элементы расположены следующим образом:

iarray[0][0],iarray[0][1],iarray[0][2],iarray[1][0],…,iarray[2][1],iarray[2][2].

Доступ к элементам массива.

Для доступа к элементу массива используется его имя, за которым следует номер элемента (индекс), заключенный в квадратные скобки, например:

for (int idx=0;idx<7;idx++)

s+=Temperatura[idx];

Нумерация элементов массива начинается с нуля. Т.е. индекс массива определяет смещение используемого элемента относительно начала массива.

Передача массивов функциям.

Массивы можно передавать функциям. Для этого необходимо в объявлении параметров функции после имени массива поставить пару квадратных скобок:

int function(double a[],int size);

Обратите внимание, что размерность массива в функцию автоматически не передается. Это можно сделать, используя второй параметр, как показано в предыдущем примере.

При вызове функции необходимо просто указать имя фактического параметра:

x=function(myarray,50);

Функция получает доступ ко всем элементам массива и может их изменять. Для запрета изменения можно добавить модификатор const:

int function(const double a[],int size);

Указатели.

Указатель является переменной, которая содержит адрес другой переменной или функции. Описание указателя определяет тип данных, на которые ссылается указатель, оно имеет вид:

тип_указываемых данных *имя_указателя;

Для доступа к объекту, на который ссылается указатель, используется имя указателя со звездочкой перед ним. Эта операция называется разыменовыванием указателя, она корректно выполняется только, если указатель был предварительно инициализирован:

int i=100;// определяется целая переменная

int *point_i;// определяется указатель на целую переменную

pointi=&i;// указатель инициализируется адресом переменной i

printf(“%i”,*pointi); // выводится значение переменной,

// определяемое указателем. Оно равно значению переменной i (100).

Обратите внимание на операцию определения адреса (&). Она является противоположной разыменованию.

Массивы и указатели тесно связаны друг с другом. Имя массива соответствует указателю на начало массива. Поэтом можно присваивать указателю адрес первого элемента массива, используя имя массива.

int array[10];

int *iptr=array;

С указателями можно выполнять целочисленные арифметические операции. При этом происходит вычисление адреса соответствующего элемента массива, а не адреса в памяти компьютера. Размер элемента определяется типом указателя. Для типа void соответственно никакие операции выполнять нельзя.

Указатель можно индексировать как массив. Следующие два оператора эквивалентны:

array[3]=10;

*(array+3)=10;

Указатели вместо массивов целесообразно использовать тогда, когда требуется последовательный доступ к элементам массива. Такая операция выполняется значительно быстрее, например:

int *ptemp=array;

for(int i=1;i<10;i++)

*(ptemp++)=0;

можно использовать для обнуления массива array.