SlideShare a Scribd company logo
1 of 7
Download to read offline
Программирование на языке C++
Лекция 2
Указатели и массивы
Александр Смаль
1/7
Указатели
∙ Указатель — это переменная, хранящая адрес некоторой
ячейки памяти.
∙ Указатели являются типизированными.
int i = 3; // переменная типа int
int * p = 0; // указатель на переменную типа int
∙ Нулевому указателю (которому присвоено значение 0)
не соответствует никакая ячейка памяти.
∙ Оператор взятия адреса переменной &.
∙ Оператор разыменования *.
p = &i; // указатель p указывает на переменную i
*p = 10; // изменяется ячейка по адресу p, т.е. i
2/7
Передача параметров по указателю
Рассмотрим функцию, меняющую параметры местами:
void swap (int a, int b) {
int t = a;
a = b;
b = t;
}
int main () {
int k = 10, m = 20;
swap (k, m);
cout << k << ’ ’ << m << endl; // 10 20
return 0;
}
swap изменяет локальные копии переменных k и m.
3/7
Передача параметров по указателю
Вместо значений типа int будем передавать указатели.
void swap (int * a, int * b) {
int t = *a;
*a = *b;
*b = t;
}
int main () {
int k = 10, m = 20;
swap (&k, &m);
cout << k << ’ ’ << m << endl; // 20 10
return 0;
}
swap изменяет переменные k и m по указателям на них.
4/7
Массивы
∙ Массив — это набор однотипных элементов,
расположенных в памяти друг за другом, доступ к
которым осуществляется по индексу.
∙ C++ позволяет определять массивы на стеке.
// массив 1 2 3 4 5 0 0 0 0 0
int m[10] = {1, 2, 3, 4, 5};
∙ Индексация массива начинается с 0, последний элемент
массива длины n имеет индекс n - 1.
for (int i = 0; i < 10; ++i)
cout << m[i] << ’ ’;
cout << endl;
5/7
Связь массивов и указателей
∙ Указатели позволяют передвигаться по массивам.
∙ Для этого используется арифметика указателей:
int m[10] = {1, 2, 3, 4, 5};
int * p = &m[0]; // адрес начала массива
int * q = &m[9]; // адрес последнего элемента
∙ (p + k) — сдвиг на k ячеек типа int вправо.
∙ (p - k) — сдвиг на k ячеек типа int влево.
∙ (q - p) — количество ячеек между указателями.
∙ p[k] эквивалентно *(p + k).
1 2 3 4 5 0 0 0 0 0
p q(p + 2) (q - 4)
6/7
Примеры
Заполнение массива:
int m[10] = {}; // изначально заполнен нулями
// &m[0] &m[9]
for (int * p = m ; p <= m + 9; ++p )
*p = (p - m) + 1;
// Массив заполнен числами от 1 до 10
Передача массива в функцию:
int max_element (int * m, int size) {
int max = *m;
for (int i = 1; i < size; ++i)
if (m[i] > max)
max = m[i];
return max;
}
7/7

More Related Content

What's hot

3.2 Методы
3.2 Методы3.2 Методы
3.2 МетодыDEVTYPE
 
условный оператор
условный операторусловный оператор
условный операторalinagangan
 
3.5 Модификаторы доступа
3.5 Модификаторы доступа3.5 Модификаторы доступа
3.5 Модификаторы доступаDEVTYPE
 
6.2 Шаблоны функций
6.2 Шаблоны функций6.2 Шаблоны функций
6.2 Шаблоны функцийDEVTYPE
 
[Youdz.ru] первообразная.
[Youdz.ru] первообразная.[Youdz.ru] первообразная.
[Youdz.ru] первообразная.You DZ
 
5.5 Ключевое слово friend
5.5 Ключевое слово friend5.5 Ключевое слово friend
5.5 Ключевое слово friendDEVTYPE
 
3.3 Конструкторы и деструкторы
3.3 Конструкторы и деструкторы3.3 Конструкторы и деструкторы
3.3 Конструкторы и деструкторыDEVTYPE
 
3.4 Объекты и классы
3.4 Объекты и классы3.4 Объекты и классы
3.4 Объекты и классыDEVTYPE
 
2.2 Стек вызовов
2.2 Стек вызовов2.2 Стек вызовов
2.2 Стек вызововDEVTYPE
 
3.7 Конструктор копирования и оператор присваивания
3.7 Конструктор копирования и оператор присваивания3.7 Конструктор копирования и оператор присваивания
3.7 Конструктор копирования и оператор присваиванияDEVTYPE
 
4.3 Виртуальные методы
4.3 Виртуальные методы4.3 Виртуальные методы
4.3 Виртуальные методыDEVTYPE
 
4.2 Перегрузка
4.2 Перегрузка4.2 Перегрузка
4.2 ПерегрузкаDEVTYPE
 
4.4 Таблица виртуальных методов
4.4 Таблица виртуальных методов4.4 Таблица виртуальных методов
4.4 Таблица виртуальных методовDEVTYPE
 
минимизация булевых функций
минимизация булевых функцийминимизация булевых функций
минимизация булевых функцийkuzinolga
 
3.1 Структуры
3.1 Структуры3.1 Структуры
3.1 СтруктурыDEVTYPE
 
Условный оператор
Условный операторУсловный оператор
Условный операторOlgaDask
 
2.8 Строки и ввод-вывод
2.8 Строки и ввод-вывод2.8 Строки и ввод-вывод
2.8 Строки и ввод-выводDEVTYPE
 
Pervoobraznaya i neopredelennyj_integral
Pervoobraznaya i neopredelennyj_integralPervoobraznaya i neopredelennyj_integral
Pervoobraznaya i neopredelennyj_integraldimonz9
 
лабораторная работа №2
лабораторная работа №2лабораторная работа №2
лабораторная работа №2Zhanna Kazakova
 

What's hot (20)

3.2 Методы
3.2 Методы3.2 Методы
3.2 Методы
 
условный оператор
условный операторусловный оператор
условный оператор
 
3.5 Модификаторы доступа
3.5 Модификаторы доступа3.5 Модификаторы доступа
3.5 Модификаторы доступа
 
6.2 Шаблоны функций
6.2 Шаблоны функций6.2 Шаблоны функций
6.2 Шаблоны функций
 
[Youdz.ru] первообразная.
[Youdz.ru] первообразная.[Youdz.ru] первообразная.
[Youdz.ru] первообразная.
 
5.5 Ключевое слово friend
5.5 Ключевое слово friend5.5 Ключевое слово friend
5.5 Ключевое слово friend
 
3.3 Конструкторы и деструкторы
3.3 Конструкторы и деструкторы3.3 Конструкторы и деструкторы
3.3 Конструкторы и деструкторы
 
3.4 Объекты и классы
3.4 Объекты и классы3.4 Объекты и классы
3.4 Объекты и классы
 
2.2 Стек вызовов
2.2 Стек вызовов2.2 Стек вызовов
2.2 Стек вызовов
 
Programming c++ (begin-if-else)
Programming c++ (begin-if-else)Programming c++ (begin-if-else)
Programming c++ (begin-if-else)
 
3.7 Конструктор копирования и оператор присваивания
3.7 Конструктор копирования и оператор присваивания3.7 Конструктор копирования и оператор присваивания
3.7 Конструктор копирования и оператор присваивания
 
4.3 Виртуальные методы
4.3 Виртуальные методы4.3 Виртуальные методы
4.3 Виртуальные методы
 
4.2 Перегрузка
4.2 Перегрузка4.2 Перегрузка
4.2 Перегрузка
 
4.4 Таблица виртуальных методов
4.4 Таблица виртуальных методов4.4 Таблица виртуальных методов
4.4 Таблица виртуальных методов
 
минимизация булевых функций
минимизация булевых функцийминимизация булевых функций
минимизация булевых функций
 
3.1 Структуры
3.1 Структуры3.1 Структуры
3.1 Структуры
 
Условный оператор
Условный операторУсловный оператор
Условный оператор
 
2.8 Строки и ввод-вывод
2.8 Строки и ввод-вывод2.8 Строки и ввод-вывод
2.8 Строки и ввод-вывод
 
Pervoobraznaya i neopredelennyj_integral
Pervoobraznaya i neopredelennyj_integralPervoobraznaya i neopredelennyj_integral
Pervoobraznaya i neopredelennyj_integral
 
лабораторная работа №2
лабораторная работа №2лабораторная работа №2
лабораторная работа №2
 

Viewers also liked

3. Объекты, классы и пакеты в Java
3. Объекты, классы и пакеты в Java3. Объекты, классы и пакеты в Java
3. Объекты, классы и пакеты в JavaDEVTYPE
 
2.7 Многомерные массивы
2.7 Многомерные массивы2.7 Многомерные массивы
2.7 Многомерные массивыDEVTYPE
 
4.6 Особенности наследования в C++
4.6 Особенности наследования в C++4.6 Особенности наследования в C++
4.6 Особенности наследования в C++DEVTYPE
 
4. Обработка ошибок, исключения, отладка
4. Обработка ошибок, исключения, отладка4. Обработка ошибок, исключения, отладка
4. Обработка ошибок, исключения, отладкаDEVTYPE
 
5.4 Ключевые слова static и inline
5.4 Ключевые слова static и inline5.4 Ключевые слова static и inline
5.4 Ключевые слова static и inlineDEVTYPE
 
Квадратичная математика
Квадратичная математикаКвадратичная математика
Квадратичная математикаDEVTYPE
 
6. Generics. Collections. Streams
6. Generics. Collections. Streams6. Generics. Collections. Streams
6. Generics. Collections. StreamsDEVTYPE
 
1. Введение в Java
1. Введение в Java1. Введение в Java
1. Введение в JavaDEVTYPE
 
5. Ввод-вывод, доступ к файловой системе
5. Ввод-вывод, доступ к файловой системе5. Ввод-вывод, доступ к файловой системе
5. Ввод-вывод, доступ к файловой системеDEVTYPE
 
2.4 Использование указателей
2.4 Использование указателей2.4 Использование указателей
2.4 Использование указателейDEVTYPE
 
2.5 Ссылки
2.5 Ссылки2.5 Ссылки
2.5 СсылкиDEVTYPE
 
6.1 Шаблоны классов
6.1 Шаблоны классов6.1 Шаблоны классов
6.1 Шаблоны классовDEVTYPE
 
4.1 Наследование
4.1 Наследование4.1 Наследование
4.1 НаследованиеDEVTYPE
 
5.1 Перегрузка операторов
5.1 Перегрузка операторов5.1 Перегрузка операторов
5.1 Перегрузка операторовDEVTYPE
 
Программирование: теоремы и задачи
Программирование: теоремы и задачиПрограммирование: теоремы и задачи
Программирование: теоремы и задачиDEVTYPE
 

Viewers also liked (15)

3. Объекты, классы и пакеты в Java
3. Объекты, классы и пакеты в Java3. Объекты, классы и пакеты в Java
3. Объекты, классы и пакеты в Java
 
2.7 Многомерные массивы
2.7 Многомерные массивы2.7 Многомерные массивы
2.7 Многомерные массивы
 
4.6 Особенности наследования в C++
4.6 Особенности наследования в C++4.6 Особенности наследования в C++
4.6 Особенности наследования в C++
 
4. Обработка ошибок, исключения, отладка
4. Обработка ошибок, исключения, отладка4. Обработка ошибок, исключения, отладка
4. Обработка ошибок, исключения, отладка
 
5.4 Ключевые слова static и inline
5.4 Ключевые слова static и inline5.4 Ключевые слова static и inline
5.4 Ключевые слова static и inline
 
Квадратичная математика
Квадратичная математикаКвадратичная математика
Квадратичная математика
 
6. Generics. Collections. Streams
6. Generics. Collections. Streams6. Generics. Collections. Streams
6. Generics. Collections. Streams
 
1. Введение в Java
1. Введение в Java1. Введение в Java
1. Введение в Java
 
5. Ввод-вывод, доступ к файловой системе
5. Ввод-вывод, доступ к файловой системе5. Ввод-вывод, доступ к файловой системе
5. Ввод-вывод, доступ к файловой системе
 
2.4 Использование указателей
2.4 Использование указателей2.4 Использование указателей
2.4 Использование указателей
 
2.5 Ссылки
2.5 Ссылки2.5 Ссылки
2.5 Ссылки
 
6.1 Шаблоны классов
6.1 Шаблоны классов6.1 Шаблоны классов
6.1 Шаблоны классов
 
4.1 Наследование
4.1 Наследование4.1 Наследование
4.1 Наследование
 
5.1 Перегрузка операторов
5.1 Перегрузка операторов5.1 Перегрузка операторов
5.1 Перегрузка операторов
 
Программирование: теоремы и задачи
Программирование: теоремы и задачиПрограммирование: теоремы и задачи
Программирование: теоремы и задачи
 

Similar to 2.3 Указатели и массивы

C++ осень 2013 лекция 2
C++ осень 2013 лекция 2C++ осень 2013 лекция 2
C++ осень 2013 лекция 2Technopark
 
Введение в синтаксис C++, часть 2
Введение в синтаксис C++, часть 2Введение в синтаксис C++, часть 2
Введение в синтаксис C++, часть 2DEVTYPE
 
массивы.строки
массивы.строкимассивы.строки
массивы.строкиdasha2012
 
PG Day'14 Russia, PostgreSQL как платформа для разработки приложений, часть 3...
PG Day'14 Russia, PostgreSQL как платформа для разработки приложений, часть 3...PG Day'14 Russia, PostgreSQL как платформа для разработки приложений, часть 3...
PG Day'14 Russia, PostgreSQL как платформа для разработки приложений, часть 3...pgdayrussia
 
Семинар 3. Многопоточное программирование на OpenMP (часть 3)
Семинар 3. Многопоточное программирование на OpenMP (часть 3)Семинар 3. Многопоточное программирование на OpenMP (часть 3)
Семинар 3. Многопоточное программирование на OpenMP (часть 3)Mikhail Kurnosov
 
презентация лекции №10
презентация лекции №10презентация лекции №10
презентация лекции №10student_kai
 
Как написать JIT компилятор
Как написать JIT компиляторКак написать JIT компилятор
Как написать JIT компиляторAndrew Aksyonoff
 
Основы языка Питон: типы данных, операторы
Основы языка Питон: типы данных, операторыОсновы языка Питон: типы данных, операторы
Основы языка Питон: типы данных, операторыTheoretical mechanics department
 
Объектно-ориентированное программирование. Лекции 9 и 10
Объектно-ориентированное программирование. Лекции 9 и 10Объектно-ориентированное программирование. Лекции 9 и 10
Объектно-ориентированное программирование. Лекции 9 и 10Dima Dzuba
 
Паттерны и примеры структур данных в NoSQL на примере Tarantool
Паттерны и примеры структур данных в NoSQL на примере TarantoolПаттерны и примеры структур данных в NoSQL на примере Tarantool
Паттерны и примеры структур данных в NoSQL на примере TarantoolAlexandre Kalendarev
 

Similar to 2.3 Указатели и массивы (20)

C++ осень 2013 лекция 2
C++ осень 2013 лекция 2C++ осень 2013 лекция 2
C++ осень 2013 лекция 2
 
6.0a
6.0a6.0a
6.0a
 
Введение в синтаксис C++, часть 2
Введение в синтаксис C++, часть 2Введение в синтаксис C++, часть 2
Введение в синтаксис C++, часть 2
 
лекция 6
лекция 6лекция 6
лекция 6
 
массивы.строки
массивы.строкимассивы.строки
массивы.строки
 
PG Day'14 Russia, PostgreSQL как платформа для разработки приложений, часть 3...
PG Day'14 Russia, PostgreSQL как платформа для разработки приложений, часть 3...PG Day'14 Russia, PostgreSQL как платформа для разработки приложений, часть 3...
PG Day'14 Russia, PostgreSQL как платформа для разработки приложений, часть 3...
 
Семинар 3. Многопоточное программирование на OpenMP (часть 3)
Семинар 3. Многопоточное программирование на OpenMP (часть 3)Семинар 3. Многопоточное программирование на OpenMP (часть 3)
Семинар 3. Многопоточное программирование на OpenMP (часть 3)
 
Step cpp0201
Step cpp0201Step cpp0201
Step cpp0201
 
Diskretn analiz
Diskretn analizDiskretn analiz
Diskretn analiz
 
Diskretn analiz
Diskretn analizDiskretn analiz
Diskretn analiz
 
презентация лекции №10
презентация лекции №10презентация лекции №10
презентация лекции №10
 
лекция 6
лекция 6лекция 6
лекция 6
 
Как написать JIT компилятор
Как написать JIT компиляторКак написать JIT компилятор
Как написать JIT компилятор
 
Основы языка Питон: типы данных, операторы
Основы языка Питон: типы данных, операторыОсновы языка Питон: типы данных, операторы
Основы языка Питон: типы данных, операторы
 
Test
TestTest
Test
 
Объектно-ориентированное программирование. Лекции 9 и 10
Объектно-ориентированное программирование. Лекции 9 и 10Объектно-ориентированное программирование. Лекции 9 и 10
Объектно-ориентированное программирование. Лекции 9 и 10
 
Основы MATLAB. Численные методы
Основы MATLAB. Численные методыОсновы MATLAB. Численные методы
Основы MATLAB. Численные методы
 
Паттерны и примеры структур данных в NoSQL на примере Tarantool
Паттерны и примеры структур данных в NoSQL на примере TarantoolПаттерны и примеры структур данных в NoSQL на примере Tarantool
Паттерны и примеры структур данных в NoSQL на примере Tarantool
 
лек7
лек7лек7
лек7
 
лек7
лек7лек7
лек7
 

More from DEVTYPE

Рукописные лекции по линейной алгебре
Рукописные лекции по линейной алгебреРукописные лекции по линейной алгебре
Рукописные лекции по линейной алгебреDEVTYPE
 
1.4 Точечные оценки и их свойства
1.4 Точечные оценки и их свойства1.4 Точечные оценки и их свойства
1.4 Точечные оценки и их свойстваDEVTYPE
 
1.3 Описательная статистика
1.3 Описательная статистика1.3 Описательная статистика
1.3 Описательная статистикаDEVTYPE
 
1.2 Выборка. Выборочное пространство
1.2 Выборка. Выборочное пространство1.2 Выборка. Выборочное пространство
1.2 Выборка. Выборочное пространствоDEVTYPE
 
Continuity and Uniform Continuity
Continuity and Uniform ContinuityContinuity and Uniform Continuity
Continuity and Uniform ContinuityDEVTYPE
 
Coin Change Problem
Coin Change ProblemCoin Change Problem
Coin Change ProblemDEVTYPE
 
Recurrences
RecurrencesRecurrences
RecurrencesDEVTYPE
 
D-кучи и их применение
D-кучи и их применениеD-кучи и их применение
D-кучи и их применениеDEVTYPE
 
Диаграммы Юнга, плоские разбиения и знакочередующиеся матрицы
Диаграммы Юнга, плоские разбиения и знакочередующиеся матрицыДиаграммы Юнга, плоские разбиения и знакочередующиеся матрицы
Диаграммы Юнга, плоские разбиения и знакочередующиеся матрицыDEVTYPE
 
ЖАДНЫЕ АЛГОРИТМЫ
ЖАДНЫЕ АЛГОРИТМЫ ЖАДНЫЕ АЛГОРИТМЫ
ЖАДНЫЕ АЛГОРИТМЫ DEVTYPE
 
Скорость роста функций
Скорость роста функцийСкорость роста функций
Скорость роста функцийDEVTYPE
 
Asymptotic Growth of Functions
Asymptotic Growth of FunctionsAsymptotic Growth of Functions
Asymptotic Growth of FunctionsDEVTYPE
 
Кучи
КучиКучи
КучиDEVTYPE
 
Кодирование Хаффмана
Кодирование ХаффманаКодирование Хаффмана
Кодирование ХаффманаDEVTYPE
 
Жадные алгоритмы: введение
Жадные алгоритмы: введениеЖадные алгоритмы: введение
Жадные алгоритмы: введениеDEVTYPE
 
Разбор задач по дискретной вероятности
Разбор задач по дискретной вероятностиРазбор задач по дискретной вероятности
Разбор задач по дискретной вероятностиDEVTYPE
 
Разбор задач модуля "Теория графов ll"
Разбор задач модуля "Теория графов ll"Разбор задач модуля "Теория графов ll"
Разбор задач модуля "Теория графов ll"DEVTYPE
 
Наибольший общий делитель
Наибольший общий делительНаибольший общий делитель
Наибольший общий делительDEVTYPE
 
Числа Фибоначчи
Числа ФибоначчиЧисла Фибоначчи
Числа ФибоначчиDEVTYPE
 
О-символика
О-символикаО-символика
О-символикаDEVTYPE
 

More from DEVTYPE (20)

Рукописные лекции по линейной алгебре
Рукописные лекции по линейной алгебреРукописные лекции по линейной алгебре
Рукописные лекции по линейной алгебре
 
1.4 Точечные оценки и их свойства
1.4 Точечные оценки и их свойства1.4 Точечные оценки и их свойства
1.4 Точечные оценки и их свойства
 
1.3 Описательная статистика
1.3 Описательная статистика1.3 Описательная статистика
1.3 Описательная статистика
 
1.2 Выборка. Выборочное пространство
1.2 Выборка. Выборочное пространство1.2 Выборка. Выборочное пространство
1.2 Выборка. Выборочное пространство
 
Continuity and Uniform Continuity
Continuity and Uniform ContinuityContinuity and Uniform Continuity
Continuity and Uniform Continuity
 
Coin Change Problem
Coin Change ProblemCoin Change Problem
Coin Change Problem
 
Recurrences
RecurrencesRecurrences
Recurrences
 
D-кучи и их применение
D-кучи и их применениеD-кучи и их применение
D-кучи и их применение
 
Диаграммы Юнга, плоские разбиения и знакочередующиеся матрицы
Диаграммы Юнга, плоские разбиения и знакочередующиеся матрицыДиаграммы Юнга, плоские разбиения и знакочередующиеся матрицы
Диаграммы Юнга, плоские разбиения и знакочередующиеся матрицы
 
ЖАДНЫЕ АЛГОРИТМЫ
ЖАДНЫЕ АЛГОРИТМЫ ЖАДНЫЕ АЛГОРИТМЫ
ЖАДНЫЕ АЛГОРИТМЫ
 
Скорость роста функций
Скорость роста функцийСкорость роста функций
Скорость роста функций
 
Asymptotic Growth of Functions
Asymptotic Growth of FunctionsAsymptotic Growth of Functions
Asymptotic Growth of Functions
 
Кучи
КучиКучи
Кучи
 
Кодирование Хаффмана
Кодирование ХаффманаКодирование Хаффмана
Кодирование Хаффмана
 
Жадные алгоритмы: введение
Жадные алгоритмы: введениеЖадные алгоритмы: введение
Жадные алгоритмы: введение
 
Разбор задач по дискретной вероятности
Разбор задач по дискретной вероятностиРазбор задач по дискретной вероятности
Разбор задач по дискретной вероятности
 
Разбор задач модуля "Теория графов ll"
Разбор задач модуля "Теория графов ll"Разбор задач модуля "Теория графов ll"
Разбор задач модуля "Теория графов ll"
 
Наибольший общий делитель
Наибольший общий делительНаибольший общий делитель
Наибольший общий делитель
 
Числа Фибоначчи
Числа ФибоначчиЧисла Фибоначчи
Числа Фибоначчи
 
О-символика
О-символикаО-символика
О-символика
 

2.3 Указатели и массивы

  • 1. Программирование на языке C++ Лекция 2 Указатели и массивы Александр Смаль 1/7
  • 2. Указатели ∙ Указатель — это переменная, хранящая адрес некоторой ячейки памяти. ∙ Указатели являются типизированными. int i = 3; // переменная типа int int * p = 0; // указатель на переменную типа int ∙ Нулевому указателю (которому присвоено значение 0) не соответствует никакая ячейка памяти. ∙ Оператор взятия адреса переменной &. ∙ Оператор разыменования *. p = &i; // указатель p указывает на переменную i *p = 10; // изменяется ячейка по адресу p, т.е. i 2/7
  • 3. Передача параметров по указателю Рассмотрим функцию, меняющую параметры местами: void swap (int a, int b) { int t = a; a = b; b = t; } int main () { int k = 10, m = 20; swap (k, m); cout << k << ’ ’ << m << endl; // 10 20 return 0; } swap изменяет локальные копии переменных k и m. 3/7
  • 4. Передача параметров по указателю Вместо значений типа int будем передавать указатели. void swap (int * a, int * b) { int t = *a; *a = *b; *b = t; } int main () { int k = 10, m = 20; swap (&k, &m); cout << k << ’ ’ << m << endl; // 20 10 return 0; } swap изменяет переменные k и m по указателям на них. 4/7
  • 5. Массивы ∙ Массив — это набор однотипных элементов, расположенных в памяти друг за другом, доступ к которым осуществляется по индексу. ∙ C++ позволяет определять массивы на стеке. // массив 1 2 3 4 5 0 0 0 0 0 int m[10] = {1, 2, 3, 4, 5}; ∙ Индексация массива начинается с 0, последний элемент массива длины n имеет индекс n - 1. for (int i = 0; i < 10; ++i) cout << m[i] << ’ ’; cout << endl; 5/7
  • 6. Связь массивов и указателей ∙ Указатели позволяют передвигаться по массивам. ∙ Для этого используется арифметика указателей: int m[10] = {1, 2, 3, 4, 5}; int * p = &m[0]; // адрес начала массива int * q = &m[9]; // адрес последнего элемента ∙ (p + k) — сдвиг на k ячеек типа int вправо. ∙ (p - k) — сдвиг на k ячеек типа int влево. ∙ (q - p) — количество ячеек между указателями. ∙ p[k] эквивалентно *(p + k). 1 2 3 4 5 0 0 0 0 0 p q(p + 2) (q - 4) 6/7
  • 7. Примеры Заполнение массива: int m[10] = {}; // изначально заполнен нулями // &m[0] &m[9] for (int * p = m ; p <= m + 9; ++p ) *p = (p - m) + 1; // Массив заполнен числами от 1 до 10 Передача массива в функцию: int max_element (int * m, int size) { int max = *m; for (int i = 1; i < size; ++i) if (m[i] > max) max = m[i]; return max; } 7/7