- •1.Системы счисления.
- •2.Принцип программного управления.
- •3. Назначение и классификация языков программирования.
- •4.Понятие и состав систем программирования.
- •5. Понятие информации и алгоритмов.
- •6.Блок-схемы разветвляющихся алгоритмов.
- •7.Блок-схемы циклических алгоритмов.
- •8.Потоковый ввод/вывод данных.
- •9.Использование манипуляторов при вводе/выводе данных.
- •10.Управляющие коды-символы. Отображение специальных символов на экране монитора.
- •11.Форматированный ввод/вывод данных.
- •12.Строковый и символьный ввод-вывод информации.
- •14.Пространство имен. Ключевое слово using как директива.
- •15. Процессор и имена заголовочных файлов
- •16.Средства отладки программ ms vs
- •17.Выполнение приложения с использованием средств интерактивной отладки.
- •18.Выполнение приложения с использованием средств планируемой отладки.
- •20.Определение переменных. Переменные и константы.
- •Описание и инициализация переменных
- •Int k; // это переменная целого типа int
- •Задание и использование констант
- •21.Логические переменные и примеры их использования в программах.
- •22.Операции присваивания. Особенности выполнения. Условная операция ?:
- •Пример конструкции ветвления
- •25.Оператор перехода goto. Оператор return. Оператор return
- •Оператор goto
- •26.Особенности синтаксиса и выполнения операторов перехода continue, break.
- •Цикл for
- •Описание синтаксиса
- •30.Время существования и область видимости переменных (auto, static, extern, register).
- •31.Создание исполняемого файла.
- •32.Массив. Определение и инициализация массива.
- •Пример инициализации массива
- •33.Символы, строки (инициализация, алгоритмы). Символьный тип char
- •34.Стандартные функции работы со строками. Функции работы со строками c
- •35.Обработка символьной информации.
- •36.Инициализация многомерных массивов.
- •37.Матрицы. Инициализация, ввод, вывод, алгоритмы поиска в матрице.
- •38.Ввод, вывод двумерных массивов.
- •39.Операции над указателями. Типы указателей.
- •40. Указатели на указатели.
- •41.Указатели и строки.
- •42.Ссылочный тип данных.
- •43. Указатели на многомерные массивы.
- •44.Массивы и указатели. Понятие индекса. Инициализация. Доступ к компонентам.
- •45.Многомерные массивы. Связь между указателями и массивами. Связь между массивами и указателями
- •46.Объявление и определение функций.
- •47.Вызов и использование функций.
- •Возврат в вызывающую функцию
- •48.Способ передачи аргументов в функции. Массивы как параметры функций.
- •49.Перегрузка функций. Функции с переменным числом аргументов. Задание параметров функции по умолчанию.
- •50.Указатели как формальные параметры и как результат функций.
- •51.Ссылки как формальные параметры и как результат функций.
- •52.Использование указателей на функцию.
- •53.Передача указателя на функцию.
- •54.Использование макроопределений.
- •55.Динамические переменные. Основные свойства динамических переменных.
- •56.Динамические массивы.
- •57.Формирование динамических переменных с использованием библиотечных функций.
- •58.Формирование динамических переменных с использованием операций new и delete.
- •59.Массивы указателей как структура данных.
- •Типы данных, используемые при работе с массивами указателей
- •60.Многоуровневые указатели.
- •61.Динамические матрицы.
- •62.Передача параметров функции main. Передача параметров в функцию
- •Тип имя_функции (const тип_переменной* имя_переменной, …) Пример
42.Ссылочный тип данных.
До настоящего момента мы предполагали, что структуры данных и их размещение в пространстве памяти строго фиксировано и не изменно, то есть статично. Поэтому, такие данные, как правило, называют статическими. При этом, следует заметить, что доступ к статическим данным всегда осуществляется непосредственно к месту их физического размещения в памяти, то есть, используется механизм непосредственного доступа к данным.
Для повышения эффективности в современных системах сбора и обработки информации часто требуется использование данных структура которых может изменяться в процессе работы программы (списки, деревья, графы...). Такие данные, как правило, называют динамическими данными или данными с динамической структурой. Для того, чтобы обеспечить эффективную работу с динамическими данными механизм непосредственного доступа как правило не приемлем. Для этого необходим механизм при котором доступ к реальным данным осуществляется через адресные значения, определяющие расположение реальных данных в пространстве памяти, и предоставляется возможность манипулирования такими адресными значениями. Такой механизм доступа к данным называют механизмом косвенного доступа.
Многие современные языки программирования, в качестве механизма косвенного доступа к данным, используют указатели, которые позволяют манипулировать адресами размещаемых в пространстве памяти объектов. Не смотря на то, что указатели являются достаточно эффективным средством работы с динамическими данными, непосредственная работа с адресами и адресной арифметикой часто является источником ошибок которые трудно обнаружить. Известным обладателем подобной проблемы является семейство языков C/C++.
В качестве механизма косвенного доступа к данным, Ада предлагает концепцию ссылочных типов, использование которых во многом подобно традиционному использованию указателей. При этом ссылочные типы Ады обладают следующими характерными особенностями:
Ссылочные типы не могут быть использованы для доступа к произвольному адресу памяти.
Значения ссылочного типа не рассматриваются как целочисленные зачения, а значит, они не поддерживают адресную арифметику.
Значения ссылочного типа могут ссылаться только на значения того типа, который был указан при описании ссылочного типа.
Из этого следует, что использование ссылочных типов Ады более безопасно и повышает общую надежность создаваемого программного обеспечения.
Примечательно, что в литературе не редко встречаются случаи когда официальная терминология нарушается и ссылочные типы Ады называют указателями. Как правило, это делается с целью обеспечить более традиционное изложение материала.
Все описания ссылочных типов Ады можно условно разделить на три вида:
ссылочные типы для динамической памяти
обобщенные ссылочные типы
ссылочные типы для подпрограмм
43. Указатели на многомерные массивы.
Указатели на многомерные массивы в языке СИ - это массивы массивов, т.е. такие массивы, элементами которых являются массивы. При объявлении таких массивов в памяти компьютера создается несколько различных объектов. Например при выполнении объявления двумерного массива int arr2[4][3] в памяти выделяется участок для хранения значения переменной arr, которая является указателем на массив из четырех указателей. Для этого массива из четырех указателей тоже выделяется память. Каждый из этих четырех указателей содержит адрес массива из трех элементов типа int, и, следовательно, в памяти компьютера выделяется четыре участка для хранения четырех массивов чисел типа int, каждый из которых состоит из трех элементов.
Таким образом, объявление arr2[4][3] порождает в программе три разных объекта: указатель с идентификатором arr, безымянный массив из четырех указателей и безымянный массив из двенадцати чисел типа int. Для доступа к безымянным массивам используются адресные выражения с указателем arr. Доступ к элементам массива указателей осуществляется с указанием одного индексного выражения в форме arr2[2] или *(arr2+2). Для доступа к элементам двумерного массива чисел типа int должны быть использованы два индексных выражения в форме arr2[1][2] или эквивалентных ей *(*(arr2+1)+2) и (*(arr2+1))[2]. Следует учитывать, что с точки зрения синтаксиса языка СИ указатель arr и указатели arr[0], arr[1], arr[2], arr[3] являются константами и их значения нельзя изменять во время выполнения программы.
Размещение трехмерного массива происходит аналогично и объявление float arr3[3][4][5] порождает в программе кроме самого трехмерного массива из шестидесяти чисел типа float массив из четырех указателей на тип float, массив из трех указателей на массив указателей на float, и указатель на массив массивов указателей на float.
При размещении элементов многомерных массивов они располагаются в памяти подряд по строкам, т.е. быстрее всего изменяется последний индекс, а медленнее - первый. Такой порядок дает возможность обращаться к любому элементу многомерного массива, используя адрес его начального элемента и только одно индексное выражение.
Например, обращение к элементу arr2[1][2] можно осуществить с помощью указателя ptr2, объявленного в форме int *ptr2=arr2[0] как обращение ptr2[1*4+2] (здесь 1 и 2 это индексы используемого элемента, а 4 это число элементов в строке) или как ptr2[6]. Заметим, что внешне похожее обращение arr2[6] выполнить невозможно так как указателя с индексом 6 не существует.
Для обращения к элементу arr3[2][3][4] из трехмерного массива тоже можнo использовать указатель, описанный как float *ptr3=arr3[0][0] с одним индексным выражением в форме ptr3[3*2+4*3+4] или ptr3[22].
Далее приведена функция, позволяющая найти минимальный элемент в трехмерном массиве. В функцию передается адрес начального элемента и размеры массива, возвращаемое значение - указатель на структуру, содержащую индексы минимального элемента.