Основы информатики Массивы. Указатели. Заикин Олег Сергеевич

Презентация:



Advertisements
Похожие презентации
Основы информатики Лекция. Массивы. Указатели. Заикин Олег Сергеевич
Advertisements

МАССИВЫ 4 Определение 4 Описание 4 Обращение к элементам массива 4 Связь массивов с указателями 4 Примеры программ.
УКАЗАТЕЛИ. Переменная - это именованная область памяти с заданным типом. [=значение]; int a; //Переменная типа integer с именем a int b=2;// Переменная.
«Обработка массивов данных» Delphi. Тема 4:4: «Обработка массивов данных» План темы: l1l1. Понятие массива данных. l2l2. Описание массива в программе.
Двумерные динамические массивы. Двумерный массив - это одномерный массив, элементами которого являются одномерные массивы. Другими словами, это набор.
Лекция 5 Адресные типы. Указатели адрес (размещение в памяти) объекта Массивы последовательность однотипных данных Ссылки альтернативное имя объекта.
Лекция 3. Одномерные массивы, указатели и ссылки Красс Александр СПбГУ ИТМО, 2008.
ФГОБУ ВПО "СибГУТИ" Кафедра вычислительных систем УКАЗАТЕЛИ Преподаватель: Доцент Кафедры ВС, к.т.н. Поляков Артем Юрьевич © Кафедра вычислительных систем.
Массивы и строки Лекция 5. Одномерные массивы. Объявление. Общая форма объявления: тип имя_переменной[размер]; Пример: double balance[100]; balance[3]
Статичні структури даних.. 2 Статические данные переменная (массив) имеет имя, по которому к ней можно обращаться размер заранее известен (задается при.
Лекция 6 1. Обработка массивов. Объявление одномерного массива Синтаксис: [ ] Пример: int a[10]; Определяет массив a размера 10, т. е. блок из 10 последо-
Массивы Описание массива. Виды и назначение массивов. Заполнение и вывод элементов массива.
Основы информатики Классы Заикин Олег Сергеевич zaikin.all24.org
Лабораторная работа 4. Подпрограммы. Задание на лабораторную работу Написать программу, реализующую хранение информации, указанной в вариантах индивидуальных.
Основные понятия программирования. АЛГОРИТМЫ + ДАННЫЕ = ПРОГРАММЫ Н. Вирт.
Распределение памяти. Динамическое выделение памяти.
Основы информатики Лекция. Функции Заикин Олег Сергеевич
Информационные технологии Классы памяти auto static extern register Автоматические переменные создаются при входе в функцию и уничтожаются при.
Практическое занятие 6. Функции. Большинство языков программирования используют понятия функции и процедуры. C++ формально не поддерживает понятие процедуры,
Транксрипт:

Основы информатики Массивы. Указатели. Заикин Олег Сергеевич

Массив – набор элементов одинакового типа расположенных в памяти подряд (друг за другом) обращение происходит с применением общего имени обращение к конкретному элементу осуществляется по индексу Массив является структурой с произвольным доступом (в отличие от списка).Массив

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

Массивы с одним индексом называют одномерными, с двумя двумерными и т. д. Одномерный массив соответствует вектору, двумерный матрице. Чаще всего применяются массивы с одним или двумя индексами, реже с тремя, ещё большее количество индексов встречается крайне редко. Размерность массива

Объявление одномерного статического массива тип имя_массива[размер-константа]; int A[4]; // одномерный статический массив целых чисел длины 4 // нумерация элементов от 0 до 3Массив Номер элемента 0-й 0-й 1-й 2-й 3-й… Имя элементаA[0]A[1]A[2]A[3]… Адрес элемента a010c010e…

Объявление двумерного статического массива тип имя_массива[размер 1][размер 2]; float B[12][15]; // двумерный статический массив вещественных // чисел размера 12 на 15 // нумерация по строкам от 0 до 11, по столбцам от 0 до 14Массив

Доступ к элементу – с помощью [] Пример int A[10]; for (int i=0; i < 10; i++) A[i] = i*i; // присваивание элементу массива for (int i=0; i < 10; i++) cout << A[i] << ; // вывод элементов массива Вывод: …81Массив

Одномерный массив одномерных массивов. Объявление Тип имя_массива[размер 1][размер 2]; int B[3][10]; // матрица с 3 строками и 10 столбцами B[2, 5] – неправильное обращение B[2][5] – правильное обращение char имя_массива[размер 1][размер 2] – массив строк Двумерный массив

Формат тип имя_массива[размер] = {список_значений} значения в списке разделены запятыми int A[4] = {1, 2, 3, 4}; Для символьных массивов тип имя_массива[размер] = строка char str[7] = Привет; const char str[7] = Привет; // строка-константа Инициализация статических массивов

Формат тип имя_массива[размер 1] [размер 2] = {список_значений} в списке значения разделены запятыми int A[3][2] = {1,4, 2,4, 5, 8}; Инициализация статического двумерного массива

Способ 1. Низкоуровневый (наследство от языка C) – через указатели Способ 2. Высокоуровневый, через vector (из библиотеки STL) Динамические массивы в C++

Указатель – переменная, которая хранит адрес другой переменной (адрес памяти). Указатель (англ. pointer) переменная, диапазон значений которой состоит из адресов ячеек памяти или специального значения нулевого адреса. Последнее используется для указания того, что в данный момент там ничего не записано. Аналогия с указателями у дороги – они содержат информацию о там, как и за какое время добраться до нужного места.Указатели

Две основные операции над указателями: присваивание и разыменование. Первая из этих операций присваивает указателю некоторый адрес. Вторая служит для обращения к значению в памяти, на которое указывает указатель. Нулевой указатель это указатель, хранящий специальное значение, используемое для того, чтобы показать, что данная переменная-указатель не ссылается (не указывает) ни на какой объект В языках Си и C++ это 0 или макрос NULL.Указатели

Использование символа * перед именем переменной в объявлении превращает ее в указатель. Формат тип *имя_переменной; Пример int *a; // указатель на переменную целочисленного типа Указатели

Унарный оператор & возвращает адрес памяти, по которому расположен операнд. // balptr получает адрес переменной balance int *balptr; int balance = 3200; balptr = &balance; Унарный оператор * (разыменование) возвращает значение переменной, расположенной по адресу, на который указывает операнд. // переменной value присваивается значение // переменной balance int value = *balptr;Указатели

Указатели Переменная num объявляется и инициализируется. После чего объявляется переменная-указатель pNum. Затем указателю pNum присваивается адрес переменной num. Таким образом обе переменные можно использовать для доступа к одному и тому же месту в памяти.

balance = 3200; balptr = &balance; value = *balptr;Указатели

С помощью указателей можно присваивать значения. *p = 101; // переменной, на которую указывает p, // присваивается значение 101 (*p)++; // инкремент значения переменной, на которую // указывает p int *p, num; p = &num; *p = 100; // значение num равно 100 (*p)++; // значение num равно 101 Арифметика указателей

Операции: ++, --, + и – Пример. p – указатель на int переменную с адресом После выполнения p++ p указывает на адрес 2004 (следующее int значение). Указатели можно сравнивать, используя операторы отношения ==,. Смысл имеет сравнение указателей на разные элементы одного и того же массива. Арифметика указателей

Указатель можно рассматривать как динамический массив. С помощью операторов new/delete можно выделять/освобождать память для динамического массива. Указатель ссылается на первый элемент массива (имя массива без индекса образует указатель на начало этого массива). Эквивалентно: ptr[4] и *(ptr+4) Позволяет обращаться к элементам массива по индексу. Динамический массив

Операторы выделения и освобождения памяти new тип[размер] возвращает адрес непрерывного участка памяти для объекта типа тип размерностью размер delete[] имя_указателя освобождает память, выделенную оператором new, начиная с адреса, на который ссылается указатель. Пример. int ar_sz=10; float *ptr = new float[ar_sz]; // выделили область памяти ptr[1]=1; ptr[2]=2; delete[] ptr; // освободили память

Указатели могут храниться в массивах. Объявление 5-элементного массива указателей на int. Фактически - двумерный массив с размерами: Массивы указателей const int arr_size = 5; void main() { int *arr[arr_size]; for (int i = 0; i < arr_size; i++) { arr[i] = new int[i+1]; for (int j = 0; j < i + 1; j++) { arr[i][j] = j + 1; cout << arr[i][j] << " "; } cout << endl; } Вывод:

Массивы указателей Динамический двумерный массив. Выделение и освобождение памяти. int **arr; arr = new int*[3]; for(int i = 0; i < 3; i++) arr[i] = new int[2]; // освобождать память нужно так for(int i = 0; i < 3; i++) delete[] arr[i]; delete[] arr;

Утечки памяти Если не освобождать память, то может остаться «мусор» - фактически занятые на время выполнения программы участки памяти, к которым из программы нельзя обратиться. int *arr; arr = new int[5]; arr = new int[6]; // утечка памяти Выделенная память должна освобождаться. Каждому new должен соответствовать delete.