
- •Д.С. Семенов
- •Содержание
- •Введение
- •Лабораторная работа №1 Программирование алгоритмов линейной структуры
- •Основные теоретические сведения
- •Арифметические операции и операции присваивания
- •Математические функции - файл math.H
- •Варианты заданий
- •Лабораторная работа №2 Программирование алгоритмов разветвляющейся структуры
- •Оператор передачи управления
- •Лабораторная работа №3 Программирование алгоритмов циклической структуры
- •Оператор цикла с предусловием
- •Операторы прерывания цикла
- •Лабораторная работа №4 Программирование алгоритмов над статическими массивами
- •Лабораторная работа №5 Программирование алгоритмов над многомерными динамическими массивами
- •Delete имя_указателя;
- •Имя_массива[индекс]
- •Delete [] имя_указателя;
- •Тип_массива ** имя_указателя;
- •Лабораторная работа №6 Программирование алгоритмов над массивами символов
- •Основные теоретические сведения
- •Список используемой литературы:
- •Математические функции - файл math.H
- •Функции ввода-вывода для стандартных файлов
- •Функции для работы со строками
- •Функции для работы с терминалом в текстовом режиме
- •Функции для выделения и освобождения памяти
- •Специальные функции
- •Компонентные функции класса ios
- •Компонентные функции класса istream
- •Компонентные функции класса ostream
- •Функции – манипуляторы
- •Параметризованные функции – манипуляторы – файл iomanip.H
- •Компонентные функции класса filebuf
- •Компонентные функции классов ifstrefm, ofstream, fstream
- •Режимы файла,
- •Приложение 2
- •Полная таблица десятичных, шестнадцатеричных и двоичных ascii - кодов
- •Продолжение табл. П1.18
Имя_массива[индекс]
является выражением с двумя операндами. Первый из них, т.е. имя_массива – константный указатель – адрес начала массива в основной памяти, а индекс – это выражение целого типа, определяющее смещение от начала массива.
Используя операцию обращения по адресу * (операция разыменования), действие бинарной операции можно представить следующим образом:
*(имя_массива + индекс)
т.е. операндами для операции [] служат имя_массива и индекс. Из этого становится очевидным, почему индекс первого элемента массива равен нулю. Таким образом, запись *имя_массива – обращение к первому элементу массива, *(имя_массива+1) – обращение ко второму, и т.д.
Поскольку сложение *(имя_массива+индекс) коммутативно, то возможна такая эквивалентная запись *(индекс+имя_массива) и, следовательно, индекс [имя_массива] именует тот же элемент массива, что имя_массива [индекс].
В некоторых конструкциях можно использовать выражение имя_массива [индекс] с отрицательным значением индекса. В этом случае имя_массива должен указывать не на начало массива, т.е. не на его нулевой элемент.
Ссылки
Ссылки – это специальный тип указателя, который позволяет работать с указателем как с объектом. Объявление ссылки делается с помощью операции ссылки, обозначаемой амперсантом (&) – тем же символом, который используется для адресации. Например, если имеется объявление
double*P = new double;
то можно создать ссылку на этот объект оператором:
double& Ref = *P;
Объявленная таким образом переменная Ref является ссылкой на объект вещественного типа. Она может рассматриваться как псевдоним объекта. Эта переменная является именно указателем, а не самим объектом. Но работа с ней производится как с объектом, в отличие от указателя.
*P=*P+0.5;
Ref=Ref+0.5;
Чаще всего ссылки используются при передаче в функции параметров по ссылке.
Одномерные динамические массивы
В соответствии с синтаксисом операция new может иметь следующий формат:
имя_указателя=new тип_массива [размерность];
Такая операция позволяет выделить в динамической памяти участок для размещения массива соответствующего типа, но не позволяет его инициализировать. В результате выполнения этой операции возвращается адрес первого элемента массива.
При выделении динамической памяти размер массива должен быть определен явно, т.к. операция new получает информацию о выделяемом участке из размерности и типе_массива. Оператор
double *A=new double [30];
создает динамический массив из 30 элементов вещественного типа.
В отличие от объявления статических массивов, при выделении динамической памяти под указатель в качестве размерности могут использоваться переменные целочисленного типа, что позволяет задавать количество элементов массива программно.
float *e;
int N;
cout << “N=”;
cin >>N;
e=new float [N];
Доступ к значениям элементов динамического массива может быть осуществлен таким же образом, как и при работе со статическими массивами. Продолжая пример выше, можно записать
for(int i=0; i<N; i++)
e[i]=double(random(41)-20)/10;
Изменять значение указателя на динамический массив нужно с осторожностью, так как указатель, значение которого определяется при выделении памяти, используется затем для освобождения этой памяти.
Освободить память, выделенную под динамический массив можно используя операцию delete, которая в этом случае имеет следующий синтаксис