- •4.Элементы языка Си. Символы, лексемы, знаки операций.
- •1.Символы языка
- •2.Лексемы
- •5.Элементы языка Си. Константы, идентификаторы, ключевые слова, комментарии.
- •6.Типы данных.
- •7.1,Объявление переменных. Массивы.
- •7.2,Объявление переменных. Массивы.
- •9.1,Операции и выражения. Арифметические операции
- •11. Логические операции и операции отношения. Операции присваивания
- •12.Условное выражение. Операция Sizeof. Операции приведения типов type.
- •13.1,Преобразование типов в выражения. Правила приведения типов.
- •13.2,Преобразование типов в выражения. Правила приведения типов.
- •14.1, Управление вычислительными процессами. Конструкции if-else, else-if.
- •14.2, Управление вычислительными процессами. Конструкции if-else, else-if.
- •15.Переключатель
- •16. Операторы цикла.
- •17.1.Инструкции break, continue. Инструкция goto и метки. Пустой оператор
- •17.2.Инструкции break, continue. Инструкция goto и метки. Пустой оператор
- •Пустой оператор
- •18.1.Классы памяти.
- •18.2.Классы памяти.
- •19.1. Функции. Определение ф-ций.
- •Определение ф-ции
- •19.2. Функции. Определение ф-ций.
- •21. Структура программы на языке Си
- •22. Директивы #define и # undef.
- •24,Директивы препроцессора. Препроцессорные операции.
- •Препроцессорные операции
- •25.1, Указатели.Операции &,*.
- •25.2, Указатели.Операции &,*.
- •26. Указатель на неопределенный тип.
- •27.1,Выражения и операции с указателями. Присваивание указателей
- •Сравнение указателей
- •27.2,Выражения и операции с указателями. Применение арифметических операций к указателям
- •29. Массивы и указатели.
- •30.Операции с указателями на массив. Адресная арифметика.
- •32.Массивы указателей. Указатели на указатели.
- •33.Массивы указателей на строки.
- •34.1,Передача параметров из операционной среды.
- •34.2,Передача параметров из операционной среды.
- •36.1,Динамичное распределение памяти.
- •36.2,Динамичное распределение памяти.
- •37,1,Структуры. Операции над структурами
- •37,2,Структуры. Операции над структурами
- •38.Массив структур. Правило выравнивания структурных переменных в памяти
- •39.1,Переименование типов. Средство typedef.
- •39.2,Переименование типов. Средство typedef.
- •40.Поля битов.
- •41.1,Объединения
- •41.2,Объединения
- •42.Ввод, вывод потока.
- •43.Доступ к файлам через поток ввода/вывода.Открытие потока.Закрытие потока.
- •44.1,Доступ к файлам через поток ввода/вывода.Функция потокового ввода вывода.
- •44.2,Доступ к файлам через поток ввода/вывода.Функция потокового ввода вывода.
- •45,Последовательный и прямой доступ в поток.
34.2,Передача параметров из операционной среды.
Количество аргументов может быть любым.
envp – указатель на массив строк, которые содержат установку среды. Среда программы – это совокупность строк, которая становится доступной программе при её запуске на выполнение. Среда программы определяет особенности поведения ядра и оболочки ОС.
COMSPEC=C:\WINDOWS\COMMAND.COM – определяет местоположение в файловой системе командного процессора.
PATH=C:\WINDOWS;C:\VC;D:\MSDEV\BIN; - перечисляет все накопители и директории, в которых будет производиться поиск запускаемого на выполнение .com, .exe, и .bat файла, если он отсутствует в текущей директории.
Функция main() может возвращать целое значение с помощью оператора return. Оно передаётся в ОС. По принятому соглашению для ОС MSDOS возврат нулевого значения свидетельствует об успешном выполнении программы.
Аргументы командной строки можно задать из программной среды. Для этого надо в меню Run->Arguments задать командную строку, но в этом случае имя программы не указывается.
35.Указатели на функции.
Имя функции - это указатель-константа на функцию, равный адресу точки входа, т.к. сама функция не является переменной. Но можно определить указатель на функцию и работать с ним как с обычной переменной: присваивать, размещать в масиве, передавать в качестве аргумента, возвращать как результат. Формат определения указателя на функцию: type(*name)(arg_list) где type – тип возвращаюемого функцией значения. name – имя переменной-указателя на функцию, arg_list – необязательный список аргументов.
Указатели на функции используются в следующих случаях:
многие библиотечные функции используют в качестве аргумента указатель на функцию.
Можно разрабатывать универсальные программы
указатели на функцию могут использоваться для косвенного вызова резидентных программ.
Как и переменные, указатели на функцию могут объединяться в массивы.
Типичным применением указателя на функцию являются так называемые системы управления меню. При выборе позиции меню ( от 1 до5 ) вызывается соответствующая функция. Указатели на каждую функцию хранятся в массиве указателей на функцию, выбор пользователя используется как индекс массива, а указатель используется для вызова функции.
#include<stdioh.h>
int difference(int,int);
int sum(int,int);
main()
{ int (*funcptr)(int,int);
int v1=20,v2=5,res;
funcptr=difference;
res = (*puncptr)(v1,v2);
printf(“%d\n”,res);
funcptr = sum;
res = (*puncptr)(v1,v2);
printf(“%d\n”,res);
}
int difference(int a,int b)
{return a-b;}
int sum(int a,int b)
{return a+b;}
В результате будет выведена сначало разность чисел 15, а потом их сумма 25
36.1,Динамичное распределение памяти.
Функции malloc и free
malloc()
СТЭК |
свободная память |
раздел глоб. Перем и конст |
Код програмы |
void *malloc(size_t size);
void *free( void *p);
Ф-ция malloc выделяет обл памяти размером size -байт. Эта ф-ция содержится в файле stdlib.h, или alloc.h. Ф-ция malloc возвращает укзатель на начало выделяемого участка памяти. Участок выделяемой памяти <=64 кбайт. Свободная память хранится в виде списка блоков. Каждый блок содержит указатель на следующий блок, размер и само свободное пространство.
Все блоки в списке хранятся в порядке возрастания адресов в памяти, при этом послед. блок содержит указатель на первый. При запросе на память просматривать список свободных блоков, пока не обнар достаточно большой. Если размер точно такой же как нужно выделить, то он отделяется и отдаётся для пользования, если он больше то он отрезается, а оставшаяся часть остаётся в списке. Если в памяти свободного места нет то ф-ция возвращает 0.