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

Использование одномерного массива

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

доступ к элементу массива: нумеруется элементы с 0

<имя массива>[номер элемента]

Ввод и вывод массива осуществляется поэлементно ( cout<<mass[номер элемента];cin>>mass[номер элемента];)

Связь массива с указателем

Связь массива с указателем: Имя массива есть константа. Указатель на массив, в котором хранится адрес нулевого элемента. &b[0]

*(b+i)=b+i*sizeof(double)

b+i-адрес i-го элемента в массиве b

использование указателя на символ

#include<iostream.h>

void main()

{

char str[] = "Здравствуй, мир!"; // объявляем символьный массив

char *b; // объявляем указатель на символ

b = &str[12]; // теперь b указывает на 12-ый символ str

*b = 'M'; // присваиваем первому элементу b символ 'М'

cout << b; // выводим строку b на экран (Мир!)

}

Передача в функцию

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

При передаче массива как фактического параметра функции Си помещает в стек только адрес первого элемента массива.

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

Обращаться к элементам массива можно с помощью индексированного указателя Pa[i]=A[i] ---содержит адреса всех элементов массива.

Динамический массив

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

Когда пользователь создает объект класса-оболочки, конструктор класса выделяет память под массив, который имеет либо указанный пользователем размер, либо размер, заданный по умолчанию. Если по мере заполнения массива вся выделенная память окажется занятой, то при добавлении очередного элемента выделенная ранее память освобождается, все хранящиеся в массиве значения сохраняются во временном массиве. Затем выделяется память под массив большего размера и в него помещаются сохраненные значения. Таким образом, изменение размера массива происходит автоматически, невидимо для пользователя.

Многомерные массивы Многомерные массивы, как правило, реализованные как одномерные массивы, каждый элемент которых является ссылкой на другой одномерный массив.

Обращение к многомерным массивам происходит по всем его индексам, так например: двумерный массив хорошо представляется как таблица со строками и столбцами. Данные в строках рассматриваются слева направо, в то время как в столбцах - сверху вниз. Для обращения к требуемому элементу двумерного массива необходимо указать номер строки и номер столбца.

float *array1; // Одномерный массив

int **array2; // Многомерный массив

array1 = new float[10]; // выделение 10 блоков размером типа float

array2 = new int*[16]; // выделение 16 блоков размером типа указателя на int

for(int i = 0; i < 16; i++)

array2[i] = new int[8];

В С++ операции new и delete предназначены для динамического распределения памяти компьютера.  Операцияnew  выделяет память из области свободной памяти, а операция delete высвобождает выделенную память.  Выделяемая память, после её использования должна высвобождаться, поэтому операции new и deleteиспользуются парами. Даже если не высвобождать память явно, то она освободится ресурсами ОС по завершению работы программы. Рекомендую все-таки не забывать про операцию delete.

// высвобождение памяти отводимой под одномерный динамический массив:

delete [] <имя массива>;

// высвобождение памяти отводимой под двумерный динамический массив:

    for (int count = 0; count < n; count++)

        delete [] <имя массива>[count];

//      где n– количество строк в массиве

Многомерные массивы передаются в функцию как:

<тип> <имя массива>[][][][];

// и все его размерности;

Матрицы – смотри про двумерные массивы

13

/*структуры описание, инициализация, доступ к полям структуры, использование структур в программе, присваивание, ввод-вывод, передача в функцию и обратно, хранение структур, массивы структур, создание динамической структуры*/

Структуры:

Структуры - это объединенные данные, у которых есть некоторая логическая взаимосвязь. В отличие от массивов, структуры могут содержать данные разных типов.

struct <имя> {

//описание полей

<тип> <имя>

};

Доступ к полям структуры: <имя переменной>.<имя поля>

Cтруктуру можно передавать в функцию по значению и по адресу

Функцияция может иметь значение : результат типа структуры и может возвращать результат типа структуры

Ввод и вывод:

Ввод данных типа структуры выполняется поэлементно стандартных типов :

cin>>01.b.x>>01.b.y;

cout<<01.b.x<<01.b.y;

Можно сделать структуру типа структуры!

Динамическая структура:

Struct Prim  {  int nom;  };  Struct Zap  {  Prim a;  Zap *next;  };

int main()  {  Zap *beg=0;  //добавляем элемент структуры  Zap *p=new Zap;  p->a.nom=1;  *beg=p;  p->next=0;  }

В итоге получаем структуры из одно элемента, который состоит из поля типа int со значением 1 и указателем на конец структуры, т.е. на ноль.

Массив структур:

Объявляется структура

structMMM{

int S;

float F;

char Str;

}

Объявляется массив типа структуры

MMMmass[100];

Присваивать по элементам

mass[1].S=55;

mass[1].F=0.75;

mass[1].Str=”This Fucking World”;

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]