- •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.Позиционирование в файле
1. Указатель на объект известного типа. Содержит адрес объекта опреде-ленного типа.
Например: int *ptr;
2. Указатель типа void. Применяется, еcли тип объекта заранее не опреде-лен.
Например: void *vptr;
3. Указатель на функцию. Адрес, по которому передается управление при вызове функции.
Например: void (*func)(int);
*func указатель на функцию, принимающей аргумент int и не возвра-щающей никаких значений.
21. Указатели на указатели. Многомерные массивы. Адресная функция
*Указатели на указатели
В языке Си можно описать и переменную типа «указатель на указатель». Это ячейка оперативной памяти, в которой будет храниться адрес указателя на какую либо переменную. Признак такого типа данных – повторение символа «*» перед идентификатором переменной. Количество символов «*» определяет уровень вложенности указателей друг в друга. При объявлении указателей на указатели возможна их одновременная инициализация. Например:
int y=5;
int *p1=&y;
int **pp1=&p1;
int ***ppp1=&pp1;
Теперь присвоим целочисленной переменной y новое значение, например 10. Одинаковое присваивание произведут следующие операции:
y=10; *p1=10; **pp1=10; ***ppp1=10;
Для доступа к области ОП, отведенной под переменную y можно использовать и индексы. Справедливы следующие аналоги:
*p1 p1[0] **pp1pp1[0][0] ***ppp1ppp1[0][0][0]
*Многомерные массивы.
Многомерные массивы отличаются от одномерных только тем, что каждый элемент характеризуется не одним, а двумя или более индексами. Они используются, например, для хранения таблиц (каждый элемент таблицы имеет 2 индекса - № строки и № столбца).
Декларация многомерного массива имеет следующий формат:
тип ID [размер1] [размер2]…[размерN] =
{ {список начальных значений},
{список начальных значений},
…
};
Списки начальных значений – атрибут необязательный.
Пример:
int a[3][3]={ {1,2,3}, {4,5,6}, {7,8,9} };
Аналогично, при обращении к конкретному элементу многомерного массива указывается имя массива и затем - последовательно индексы элемента, каждый в квадратных скобках; например:
a[2][1]
a[i+1][k]
*Адресная функция
&-вроде она..а так хз
22. Связь указателей с массивами.
Идентификатор массива указывает адрес памяти, начиная с которого он расположен, т.е. адрес его первого элемента. Работа с массивами тесно связана с применением указателей.
Пусть объявлен массив a из 5 целочисленных элементов:
int a[5];
a
a[0] |
a[1] |
a[2] |
a[3] |
a[4] |
4000 4004 4008 4012 4016
Здесь приведено символическое изображение оперативной памяти, выделенной компилятором для объявленного целочисленного массива а[5]. Адрес массива выбирается компилятором в зависимости от размера доступной памяти, наличия других переменных и массивов и др. Для конкретности, здесь положено значение адреса, равное 4000. В реальной программе вместо 4000 может быть другое значение, но относительное положение элементов массива всегда остается постоянным.
В языке С идентификаторы массивов считаются константными указателями (т.е. в данном примере а "имеет значение" 4000). Такую константу можно присвоить переменной типа указатель, но нельзя подвергать преобразованиям, например:
int a[5], *q;
q = a; // Правильно - присваивание константы переменной
a = q; // Ошибка: в левой части - указатель-константа
23. Указатели на указатели. . Декларация массива указателей.
*Указатели на указатели
В языке Си можно описать и переменную типа «указатель на указатель». Это ячейка оперативной памяти, в которой будет храниться адрес указателя на какую либо переменную. Признак такого типа данных – повторение символа «*» перед идентификатором переменной. Количество символов «*» определяет уровень вложенности указателей друг в друга. При объявлении указателей на указатели возможна их одновременная инициализация. Например:
int y=5;
int *p1=&y;
int **pp1=&p1;
int ***ppp1=&pp1;
Теперь присвоим целочисленной переменной y новое значение, например 10. Одинаковое присваивание произведут следующие операции:
y=10; *p1=10; **pp1=10; ***ppp1=10;
Для доступа к области ОП, отведенной под переменную y можно использовать и индексы. Справедливы следующие аналоги:
*p1 p1[0] **pp1pp1[0][0] ***ppp1ppp1[0][0][0]
*Декларация массива указателей.
Декларация многомерного массива имеет следующий формат:
тип ID [размер1] [размер2]…[размерN] =
{ {список начальных значений},
{список начальных значений},
…
};
При обработке декларации любой переменной, например double x=1.5; компилятор выделяет для переменной участок памяти, размер которого определяется ее типом (double – 8 байт) и инициализирует его указанным значением (если таковое присутствует). Символ «звездочка» относится непосредственно к ID указателя, поэтому для того, чтобы декларировать несколько указателей, ее нужно записывать перед именем каждого из них.
Например, в декларации:
int *a, *b, с;
24.Функции пользователя, их использование. . Декларация, реализация и обращение к функции. Передача параметров по адресу и значению.
*Функции пользователя, их использование
• Функции группируют связанные операторы для выполнения определенной задачи.
• Ваша программа вызывает функцию, обращаясь к ее имени, за которым следуют круглые скобки, например bеер ().
• После завершения обработки большинство функций возвращают значение определенного типа, например int или float, которое программа может проверить или присвоить переменной.
• Ваши программы передают параметры (информацию) функциям, например имя, возраст или оклад служащего, заключая параметры в круглые скобки, которые следуют за именем функции. • C++ использует прототипы функций для определения типа возвращаемого функцией значения, а также количества и типов параметров, передаваемых функции.
*Декларация, реализация и обращение к функции
Рассмотрим методику работы с указателями на функции.
1. Как и любой объект языка Си, указатель на функции необходимо декларировать. Формат объявления указателя на функции следующий:
тип (*переменная-указатель)(список параметров);
т.е. декларируется указатель, который можно устанавливать на функции, возвращающие результат указанного типа и которые имеют указанный список параметров. Наличие первых круглых скобок обязательно, так как без них – это декларация функции, которая возвращает указатель.
Каждая функция в программе должна быть определена (только один раз). Определение функции – это код функции, включающий ее заголовок и полный текст функции. Оно имеет следующий вид:
тип_результата имя_функции ( список параметров )
{
код функции
return выражение;
}
Параметры - это переменные, доступные внутри функции, значения которым присваиваются при вызове функции. Результат - это значение, передаваемое из функции обратно в вызывающую программу. Таким образом, параметры являются "входными данными" функции, а результат - "выходными данными".
В языке Си каждая функция – это отдельный блок программы, вход в который возможен только через вызов (использование) данной функции. Такие вызовы могут находиться в различных местах программы и должны иметь следующий формат:
имя_функции (список аргументов);
где в качестве аргументов можно использовать константы, переменные, выражения
*Передача параметров по адресу и значению.
При передаче параметров по значению они при выходе из функции не изменятся.
При передаче же параметров по ссылке прив выходе из функции из значения могут измениться