- •Синтаксис языка c. Структура программы. Характеристика функции main.
- •Директивы препроцессора (основные).
- •Базовые типы данных.
- •Декларация объектов программы на языке c, атрибуты: тип, класс памяти и область действия.
- •Константы в программах на языке c.
- •Функции вывода информации. Использование модификаторов и управляющих последовательностей.
- •Функции ввода информации.
- •Арифметические операции, преобразование типов операндов арифметических операций. Средство "typedef".
- •Ввод/вывод потоками (cin, cout).
- •Синтаксис операторов языка c, операторы-выражения, управляющие операторы в языке с.
- •Сокращенная запись операции присваивания
- •X##; - постфиксную.
- •Операции отношений (сравнения) и логические операции. Операции сравнения
- •Логические операции
- •Побитовые логические операции, операции над битами
- •Операторы передачи управления goto, continue, break, return.
- •Ветвящийся алгоритм. Условный оператор if, условная операция «? :».
- •If (условие ) оператор1;
- •If (условие1) оператор1;
- •Оператор выбора альтернатив (переключатель) switch.
- •Операция ",".
- •Циклический алгоритм. Оператор с предусловием while.
- •Оператор цикла с постусловием do - while.
- •Оператор цикла с предусловием и коррекцией for.
- •Функции в с. Способы описания функции, операция вызова функции.
- •Указатели как тип данных. Операции * и &. Операции над указателями.
- •Одномерные массивы и связь с указателями.
- •Cтроковые данные в с. Библиотечные функции для их обработки.
- •Указатель на указатель, многомерные массивы.
- •Динамическая память, функции и операции работы с памятью.
- •Указатели на функцию
- •Тип данных «структура», общая характеристика.
- •Файлы в с. Типы файлов, понятие файловой переменной и увязка ее с физическим файлом.
- •Текстовые файлы.
- •Основные режимы работы с бинарными файлами, последовательный и прямой доступ.
Указатели как тип данных. Операции * и &. Операции над указателями.
Обращение к объектам любого типа в языке C может проводиться по имени, как мы до сих пор делали и по указателю (косвенная адресация).
Указатель – это переменная, которая может содержать адрес некоторого объекта в памяти компьютера, например адрес другой переменной. И через указатель, установленный на переменную можно обращаться к участку оперативной памяти, отведенной компилятором под ее значения.
Указатель объявляется следующим образом:
тип *идентификатор;
Например: int *a, *d;
float *f;
Здесь объявлены указатели a, d, которые можно инициализировать адресами целочисленных переменных и указатель f, который можно инициализировать адресами вещественных переменных.
С указателями связаны две унарные операции: & и *. Операция & означает «взять адрес». Данная операция допустима только над переменными. Операция * - «значение, расположенное по указанному адресу» и работает следующим образом:
1.определяется местоположение в оперативной памяти переменной типа указатель;
2.извлекается информация из этого участка памяти и трактуется как адрес переменной с типом в объявлении указателя;
3.производится обращение к участку памяти по выделенному адресу для проведения некоторых действий.
Указатель может использоваться в выражениях вида:
p # ie, ##p, p##, p# = ie,
где p - указатель, ie - целочисленное выражение, # - символ операции '+' или '-'.
Значением таких выражений является увеличенное или уменьшенное значение указателя на величину ie*sizeof(*p). Следует помнить, что операции с указателями выполняются в единицах памяти того типа объекта, на который ссылается этот указатель.
Одномерные массивы и связь с указателями.
Указатели и массивы в языке С тесно связаны между собой. Имя массива является указателем на его первый элемент, т.е. для массива
int p[10],
p
p[0]
имеют одинаковые значения, т.к. адрес первого (с индексом 0) элемента массива это адрес начала последовательно расположенных элементов массива. Рассмотрим обращение к элементам массива на примере. Пусть объявлены - массив из 100 бъектов типа float и указатель на объект типа float:
float p[100];
float *q;
int i;
если выполнить операцию q=p;
то обращения к элементу массива p: p[i] *(q+i) и *(p+i) эквивалентны.
Таким образом, для любых указателей можно использовать две эквивалентные формы выражений для доступа к элементам массива: q[i] и *(q+i). Первая форма удобнее для читаемости текста, но вторая обычно эффективнее по быстродействию программы.
Очевидна эквивалентность выражений
&q[0] <-> &(*q) <-> q // адрес нулевого элемента массива
*q <-> q[0] // значение нулевого элемента массива
Для определения размера памяти, необходимого для размещения объектов в языке С используется унарная операция:
int sizeof(параметр);
параметр – тип объекта или его идентификатор (только не имя функции). Операция sizeof возвращает размер памяти в байтах, отводимый под объект.
Если указан идентификатор сложного объекта (массив, структура, объединение), то результатом является размер всего сложного объекта.
Например:
sizeof(int) результат 2 байта,
int b[5]; sizeof(b) результат 10 байт;
int c[3][4]; sizeof(c) результат 24 байта.
