![](/user_photo/2706_HbeT2.jpg)
- •Алфавит языка Си
- •Идентификаторы (имена) языка Си
- •Ключевые слова
- •Константы (литералы)
- •Комментарии
- •Пример программы на Си
- •Последовательность обработки программы на Си
- •Термины
- •2.1. Концепция типа данных
- •2.2. Базовые типы данных
- •2.2. Атрибуты объектов
- •2.2.1. Класс памяти
- •2.2.2. Область (сфера) действия, связанного с объектом идентификатора
- •2.2.3. Область видимости объекта
- •2.2.4. Продолжительность существования объекта (время жизни)
- •2.2.5. Тип компоновки (связывания)
- •2.3. Объявления, определения и описания в языке Си
- •2.4. Объявления переменных стандартных типов
- •2.5. Преобразования типов
- •Термины
- •3.1. Определение и общая классификация операторов
- •3.2. Последовательно выполняемые операторы
- •3.3. Операции языка Си
- •3.4. Приоритеты и порядок выполнения операций, тип результата выражения
- •Тип результата выражения арифметической бинарной операции
- •Даны X, y (значения вводятся с клавиатуры). Вычислить a, если
- •Термины
- •4.1. Условный оператор
- •4.2. Переключатель
- •4.3. Операторы циклов
- •4.4. Оператор безусловной передачи управления
- •4.5. Оператор возврата из функции
- •4.6. Оператор выхода из цикла или переключателя
- •4.7. Оператор перехода к следующей итерации цикла
- •Термины
- •5.1. Указатели
- •5.2. Ссылки
- •5.3. Массивы
- •5.3.1. Одномерные массивы
- •Int a[100]; // Объявление массива из 100 элементов типа int
- •Инициализация массива
- •Массивы и указатели
- •Динамические массивы
- •5.3.2. Многомерные массивы
- •Инициализация многомерных массивов
- •Динамические многомерные массивы
- •Указатель на массив указателей и указатель на массив
- •Int ** p1; // Указатель на массив указателей
- •Int (*p2)[10]; // Указатель на массив из 10 элементов типа int
- •Термины
- •6.1. Структуры
- •Int X; // Поле структуры
- •Int X; // Поле структуры
- •Int X; // Поле структуры
- •Инициализация структуры
- •Int year, page; // Год издания и число страниц
- •6.2. Объединения
- •6.3. Битовые поля структур и объединений
- •Int a1: 10; // Битовое поле из 10 бит
- •Int a2: 14; // Битовое поле из 14 бит
- •Int :6; // Пропускаем 6 бит
- •6.4. Директива определения типа typedef
- •Термины
- •7.1. Определение, описание и вызов функции
- •7.2. Использование значений параметров по умолчанию
- •7.3. Изменение значений скалярных параметров в функциях
- •7.3.1. Передача параметров в функции по значению
- •7.3.1. Передача параметров в функции по указателю (по ссылке)
- •7.4. Передача в функцию массивов
- •7.4.1. Передача в функцию массивов, не являющихся строками
- •7.4.2. Передача в функцию строк
- •7.5. Функции с переменным количеством параметров
- •7.6. Рекурсивные функции
- •7.7. Подставляемые (inline) функции
- •7.8. Указатели на функции
- •7.10. Шаблоны функций
- •7.11. Возможные параметры функции main
- •Термины
- •8.1. Общие сведения о вводе-выводе
- •8.2. Стандартные потоки ввода-вывода
- •8.3. Функции для вывода в поток stdout
- •8.4. Функции для считывания из потока stdin
- •8.5. Ввод- вывод в файлы Открытие файла
- •Закрытие файла
- •Определение конца файла
- •Функции записи в файл
- •Функции чтения из файла
- •Функции позицирования в файлах
- •Функции для сброса буферов
- •Термины
- •9.1. Стадии и основные команды препроцессорной обработки
- •9.2. Замены в тексте
- •9.3. Макроподстановки
- •9.4. Включение текстов из файлов
- •9.5. Условная компиляция
- •9.6. Директива нумерации строк
- •9.7. Директива обработки ошибок
- •9.8. Директивы # и ##
- •9.9. Заранее определенные препроцессорные идентификаторы
- •9.10. Указания компилятору
- •Термины
5.2. Ссылки
В языке Си++ дополнительно к типам, существующим в языке Си, появился еще один новый тип, так называемые, ссылки. Его иногда удобно использовать в качестве параметров функции. Формат этого типа следующий:
<type> & <имя_ссылки>=<инициализатор>;
Инициализация обязательна, в качестве инициализатора выступает объект, уже размещенный в памяти. Ссылка представляет второе имя уже существующего объекта, ссылка по своей сути является указателем, но к ней нет необходимости применять операцию * (обращение по адресу) при обращении к объекту, любое обращение к ссылке приводит к обращению к объекту, на который ссылается ссылка.
int a=5;
int & L=a; // Ссылка на a
L=10; printf(“%d”, a); // Печатается 10
Не существует указателей на ссылки, ссылок на ссылки, массивов ссылок.
5.3. Массивы
Дадим следующее определение массива
Массив – это производный тип, представляющий собой множество элементов, все элементы массива имеют один и тот же тип и следуют в памяти друг за другом.
Массивы бывают одномерными и многомерными.
5.3.1. Одномерные массивы
Формат определения одномерного массива:
<type> <имя_массива>[<конст_выражение>];
Примеры:
Int a[100]; // Объявление массива из 100 элементов типа int
char C1[20], C2[150]; // Объявляются 2 массива элементов типа char из 20 и 150 элементов
Описание массива может не содержать число элементов.
extern float y[]; // Описание
…….
float y[20]; // Определение
Обращение к элементам массива осуществляется с помощью специальной операции [] – обращение по индексу.
int m[10];
m[0]=1; // Элементу массива с индексом 0 присваивается значение 1
m[1]=2; // Элементу массива с индексом 1 присваивается значение 2
… ;
m[9]=10; // Элементу массива с индексом 9 присваивается значение 10
Индексация всегда начитается с 0, последний элемент имеет индекс n-1.
Элемент массива может участвовать в любом выражении, где допустимо использование переменной соответствующего типа.
m[5]=m[3]+m[4]*100;
Инициализация массива
Массив может иметь инициализацию, если массив имеет инициализацию, то размерность можно не указывать, она определяется по умолчанию.
int a1[4]={ 2, 5, 9, 10 }; // Массив из 4-х элементов
int a2[7]={ 3, 4, 5 }; // Массив из 7 элементов, проинициализированы первые 3
char c1[]={ ‘A’, ‘g’, ‘1’, ‘y’, ‘I’ }; // Массив из 5 элементов,
// размерность определяется по умолчанию
Если массив объявлен за пределами блоков, то по умолчанию его элементы инициализируются 0.
Массивы и указатели
Имя массива, используемое внутри выражения без [] является указателем на первый элемент массива (элемент с индексом 0). Данный указатель является константным, т.е. его значение нельзя изменять.
Для некоторого массива, например
int A[10];
выполняется равенство A==&A[0]
Доступ к элементу массива возможен или через индексное выражение или через операцию обращения по адресу.
for (int i=0; i<10; i++) A[i]=2*i;
for (int i=0; i<10; i++) *(A+i)=2*i; // Наличие скобок обязательно,
// так как приоритет операции * выше, чем операции +
Кроме того имя массива без скобок является указателем, тип которого соответствует указателю на тип элемента массива. Допустим следующий порядок работы с массивом:
int a[10];
int *p;
p=a;
for(int i=0; i<10; i++) p[i]=i*i;
или
for(int i=0; i<10; i++) *(p+i)=i*i;
Строки
Строка – это символьный массив, заканчивающийся символом с кодом 0 (символ NULL) – это служебный символ, являющийся признаком конца строки.
Практически все стандартные функции, работающие со строками, используют это свойство для определения конца строки.
Примеры:
char str[]=“ABCD”; // Это строка, выделяется память под 5 символов (последний 0)
char c[]={‘A’, ‘B’, ‘C’, ‘D’ }; // Это просто массив из 4-х символов
char *s=“Пример строки”; // Допустимо такое определение строки
Зная признак конца строки можно, например, вычислить длину строки.
int len=0; // Длина строки
for(; s[len]; len++) ;