Основы информатики Лекция. Массивы. Указатели. Заикин Олег Сергеевич http://sat.isa.ru/pdsat/files/teaching/ zaikin.icc@gmail.com.

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



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

Основы информатики Лекция. Функции Заикин Олег Сергеевич
УКАЗАТЕЛИ. Переменная - это именованная область памяти с заданным типом. [=значение]; int a; //Переменная типа integer с именем a int b=2;// Переменная.
МАССИВЫ 4 Определение 4 Описание 4 Обращение к элементам массива 4 Связь массивов с указателями 4 Примеры программ.
Лекция 5 Адресные типы. Указатели адрес (размещение в памяти) объекта Массивы последовательность однотипных данных Ссылки альтернативное имя объекта.
Двумерные динамические массивы. Двумерный массив - это одномерный массив, элементами которого являются одномерные массивы. Другими словами, это набор.
«Обработка массивов данных» Delphi. Тема 4:4: «Обработка массивов данных» План темы: l1l1. Понятие массива данных. l2l2. Описание массива в программе.
Введение в язык программирования С++. Элементы языка общие с С. Полиморфизм. Инкапсуляция.
Основы информатики Классы Заикин Олег Сергеевич zaikin.all24.org
Массивы и строки Лекция 5. Одномерные массивы. Объявление. Общая форма объявления: тип имя_переменной[размер]; Пример: double balance[100]; balance[3]
Лекция 6 1. Обработка массивов. Объявление одномерного массива Синтаксис: [ ] Пример: int a[10]; Определяет массив a размера 10, т. е. блок из 10 последо-
Лекция 9 Функции. Массивы-параметры функции Передача массива в функцию Пример: void array_enter(int a[], int size) { int i; for (i = 0; i < size; i++)
ФГОБУ ВПО "СибГУТИ" Кафедра вычислительных систем УКАЗАТЕЛИ Преподаватель: Доцент Кафедры ВС, к.т.н. Поляков Артем Юрьевич © Кафедра вычислительных систем.
Распределение памяти. Динамическое выделение памяти.
Массивы Описание массива. Виды и назначение массивов. Заполнение и вывод элементов массива.
Практическое занятие 6. Функции. Большинство языков программирования используют понятия функции и процедуры. C++ формально не поддерживает понятие процедуры,
ПРОБЛЕМЫ ПРИ ЯВНОМ РАСПРЕДЕЛЕНИИ ПАМЯТИ В С++, СПОСОБЫ ИХ РЕШЕНИЯ. ССЫЛКИ И УКАЗАТЕЛИ. РАСПРЕДЕЛЕНИЕ ПАМЯТИ ПОД ПЕРЕМЕННЫЕ, УПРАВЛЕНИЕ ПАМЯТЬЮ С ПОМОЩЬЮ.
ПРОГРАММИРОВАНИЕ/ ЯЗЫКИ ПРОГРАММИРОВАНИЯ Лекция 4 Работа с бинарными файлами (весенний семестр 2012 г.) Доцент Кафедры вычислительных систем, к.т.н. Поляков.
Лекция 6 Функции. Объявления и определения Объявление функции – указание имени функции, а также входных и выходных параметров Определение функции – указание.
Лабораторная работа 4. Подпрограммы. Задание на лабораторную работу Написать программу, реализующую хранение информации, указанной в вариантах индивидуальных.
Транксрипт:

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

МАССИВЫ И УКАЗАТЕЛИ

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

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

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

Объявление одномерного статического массива тип имя_массива[размер-константа]; 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

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

Строка – символьный одномерный массив, который завершается нулевым символом \0. Объявляя массив str, предназначенный для хранения 10-символьной строки, следует использовать char str[11]; // резервируется место для \0 Строковый литерал – список символов, заключенный в двойные кавычки. Hello // в памяти – нулевая строка, состоит только из \0 Строка как массив Hello\0

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

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

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

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

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

Массивы указателей Динамический двумерный массив. Выделение и освобождение памяти. 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]; // утечка памяти