Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
с++ метода3511.doc
Скачиваний:
47
Добавлен:
15.04.2015
Размер:
409.6 Кб
Скачать

Распределение памяти

Код

программы

Внешние

и

статические

данные

Динамически

распределенная

память

Стек

Массивы

Массив - совокупность данных одного типа.

Тип <имя> [количество элементов]; - обычный одномерный массив. Этот массив выделяется один раз и держит память занятой в зависимости от принадлежности к определенному классу памяти.

void f( )

{ объявление массива}

После выхода из блока место в стеке очищается – это локальный массив.

Тип <имя>[количество элементов][количество элементов]; - двумерный массив. В памяти компьютера двумерный массив располагается последовательно по строкам. Расположение многомерного массива в памяти можно определить по правилу, что быстрее всего изменяется последний индекс. Для доступа к элементу массива используется специальная операция индексирования. Значения индекса начинаются с 0. Последний индекс на единицу меньше количества элементов. Контроль выхода за границы массива возлагается на программиста.

Пример:

int A[3] ; //объявление массива из 3-х элементов целого типа выделяется 3*sizeof(int) байт памяти

A[0]=11; // присваивание первому элементу значения 11

cout<<A[0]<<’\n’; // Вывод 11 на экран

++A[0];//Увеличение первого элемента на 1

cout<<A[0]<<’\n’; // Вывод 12 на экран

Инициализация

int A[3] = {6,7,8};

Компилятор выделяет 4*количество элементов, в данном случае 4*3=12 байт.

int A1[2] [2] = {{3,4},{5,6}};

Объявление массива типа char:

char A[10];

Инициализация массива типа char:

char s1[6] = {‘Р’, ‘Г’,’Р’,’Т’,’A’, ‘\0’};

В конце объявления массива типа сhar надо вставить’\ 0’ – символ- терминатор, по этому символу определяется конец строки:

char s1[ ] = {‘Р’,’Г’,’Р’,’Т’,’А’,\’0’}.

Чаще используется другой вариант инициализации:

char s2[ ] = “РГМУ”,

терминатор в этом случае автоматически добавляет компилятор.

Пример: подсчет среднемесячной температуры

float Srtemp(float mastemp[ ], int kol_day)

{int i; float s=0;

for(i=0;i<kol_day; i++ )

s+= mastemp[i];

return s/ kol_day;}

Вызов функции для массива температур марта -

float Mart[31] , st;

st= Srtemp (Mart,31);

Указатели

Указатели – переменные, позволяющие хранить адрес.

Объявление указателя: тип * имя_указателя;

Компьютер выделяет 4 байта памяти по умолчанию для хранения адреса.

Пример:

char * s3; //s3 хранит адреса типа Char

char * s3 = “Рязань”; //в данном случае s3 трактуется не только

// как адрес, но и как символьная строка длиной 7 байт начальный

// адрес которой записан в s3.

Указателям до их использования необходимо задавать начальные (инициализирующие) значения.

Например:

int* px=NULL; // NULL зарезервированное значение адреса

int x,*px1; px1=&x; // переменной указателю px присваивается

// значение адреса переменной x.

<тип> - необходим, чтобы компилятор мог определить на сколько байт осуществляется перемещение при ++ или --.

Связь одномерных массивов с указателями

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

Например, для массива int A[3]; А ==&A[0]. Для извлечения значения по какому-либо адресу можно применить операцию разадресации: *А == А[0].

Для i - го элемента *(А+I) == A[I].