- •1. Структура программы на языке Си. Алфавит языка. Базовые типы данных
- •2.Константы в программах
- •3.Операции, выражения Операция приведения типа Операции отношения.
- •Include — вставляет текст из указанного файла
- •Ifdef — осуществляет условную компиляцию при определённости символической константы
- •Ifndef — осуществляет условную компиляцию при неопределённости символической константы
- •5. Функции ввода-вывода printf() и scanf(). Ввод-Вывод символьных и строковых данных. . Потоковый ввод-вывод
- •7. Операторы передачи управления
- •8.Арифметические операции. Преобразование типов при выполнении операций. Операция присваивания. . Операция присваивания и ее сокращенные формы.
- •9.Операции отношений и логические операции. Операции сравнения
- •10. Операторы безусловной и условной передачи управления. .
- •11.Операции «,» и «?».
- •12. Характеристика базовых типов, операции с ними, инициализация данных.
- •13. Организация циклических алгоритмов. Операторы цикла.. Вложенные циклы. Операторы continue, break и return
- •14.Функции exit и abort
- •15. Оператор выбора альтернатив (переключатель)
- •16. Символьные строки. Способы задания строк. Ввод и вывод строк. Основные функции работы со строками. . Ввод-Вывод символьных и строковых данных
- •17. Общая характеристика стандартных математических функций (библиотека math.H).
- •18. Одномерный массив - описание, инициализация, обращение к элементам
- •19.Указатели, операции «*» и «&».Операция sizeof
- •*Операция sizeof
- •20. Инициализация указателей
- •1. Указатель на объект известного типа. Содержит адрес объекта опреде-ленного типа.
- •2. Указатель типа void. Применяется, еcли тип объекта заранее не опреде-лен.
- •3. Указатель на функцию. Адрес, по которому передается управление при вызове функции.
- •21. Указатели на указатели. Многомерные массивы. Адресная функция
- •22. Связь указателей с массивами.
- •25. Указатель на функции. Массив указателей на функции
- •26. Классы памяти и область действия переменных. Классы памяти, атрибуты auto, register, static, extern.
- •27. Структуры. Шаблон структуры. Способы обращения к полям структуры.
- •Тип_элемента_1 имя_элемента_1; тип_элемента_2 имя_элемента_2;
- •Тип_элемента_n имя_элемента_n;
- •29. Работа с динамической памятью. Операции new, delete
- •30. Работа с файлом. Необходимые действия при обработке файлов.
- •31. Работа с файлами. Открытие, закрытие файлов
- •32.Основные функции обработки файлов. Функции произвольного доступа
- •33.Вложенные структуры
- •34.Массивы структур
- •35.Размещение структурных переменных в памяти
- •36.Объединения
- •37.Перечисления
- •38.Позиционирование в файле
25. Указатель на функции. Массив указателей на функции
*Указатель на функции
В языке Си допускаются указатели не только на данные, но и на функции. Они позволяют, например, создать функцию, строящую таблицу значений любой другой функции (с заданным видом списка параметров); при этом конкретный вызов этой другой функции осуществляется через указатель на функцию.
Рассмотрим методику работы с указателями на функции.
1. Как и любой объект языка Си, указатель на функции необходимо декларировать. Формат объявления указателя на функции следующий:
тип (*переменная-указатель)(список параметров);
т.е. декларируется указатель, который можно устанавливать на функции, возвращающие результат указанного типа и которые имеют указанный список параметров. Наличие первых круглых скобок обязательно, так как без них – это декларация функции, которая возвращает указатель.
Например, объявление вида:
double (*p_f )(char, double);
говорит о том, что декларируется указатель p_f, который можно устанавливать на функции, возвращающие результат типа double и имеющие два параметра: первый – символьного типа, а второй – вещественного типа.
2. Идентификатор функции считается константным указателем, поэтому для того, чтобы установить переменную-указатель на конкретную функцию, достаточно ей присвоить ее идентификатор:
переменная-указатель = ID_функции;
Например, имеется функция с прототипом: double f1(char, double); тогда операция
p_f = f1;
установит указатель p_f на данную функцию.
*Массив указателей на функции
int f( int a, int b ){
std::cout << "hell";
return 0;
}
typedef int (*lpFunc)(int,int);
int main(){
lpFunc arr[10];
arr[0] = &f;
arr[0]( 10, 10 );
return 0;
}
26. Классы памяти и область действия переменных. Классы памяти, атрибуты auto, register, static, extern.
Класс памяти определяет время жизни объекта и место его размещения в памяти (относительно границ сегмента памяти, выделенного для программы в целом).
Существует 4 класса памяти: static (статический), extern (внешний), auto (автоматический), register (регистровый).
Объекты, имеющие класс памяти static, существуют (занимают место в памяти) в течение всего времени работы программы. Их место в памяти определяется на этапе компиляции. К ним по умолчанию относятся глобальные переменные.
Объекты, имеющие класс памяти auto, существуют (занимают место в памяти) лишь во время выполнения блока, в котором объявлены
Класс памяти extern похож на static, но означает, что объект объявлен позже в этом или другом файле (см. ниже). Он может применяться к глобальным переменным.
Класс памяти register похож на auto; но он рекомендует компилятору разместить (если возможно) переменную не в стеке, а непосредственно в регистрах процессора. Регистровая память позволяет увеличить быстродействие программы, но к размещаемым в ней объектам в языке Си (но не С++) не применима операция получения адреса «&».
Обычно класс памяти переменных определяется по умолчанию (static либо auto). Но программист имеет возможность поменять класс памяти объекта, указав требуемый класс при объявлении перед его типом