
- •Базовые понятия информатики. Понятие «Информатика» и «Информация»
- •Информация
- •Информационные технологии
- •Понятие алгоритма. Свойства и классы алгоритмов. Формы представления алгоритмов
- •Понятие алгоритма. Базовые алгоритмические структуры
- •Представление данных в памяти персонального компьютера.
- •Принципы обработки программных кодов
- •Компиляторы
- •Интерпретатор
- •Язык с. История развития. Основные свойства языка
- •Отличительные особенности языкаC
- •Элементы языка c
- •Константы
- •Базовые типы данных
- •Директива #include
- •Использование void
- •Инструкция return
- •Описание переменных
- •Обработка данных. Операторы
- •Арифметические операторы
- •Приоритет операторов и порядок вычислений
- •Используемые алгоритмы обработки данных
- •Аккумуляторы
- •Преобразования типов данных
- •Декларации и дефиниции функций
- •Формальные и фактические параметры. Вызов функций
- •Возврат функцией значений
- •Переменные в функциях
- •Автоматические (локальные) переменные
- •Внешние (глобальные) переменные
- •Статические переменные
- •Передача параметров по значению
- •Передача параметров по ссылке
- •Значения параметров по умолчанию
- •Перегрузка функций
- •Рекурсия
- •Встроенные функции
- •Обработка символьных данных
- •Функция puts()
- •Функция putchar()
- •Функция printf()
- •Выбор правильных средств вывода информации
- •Функция gets()
- •Функция getchar()
- •Функция scanf()
- •Выбор соответствующих средств ввода данных
- •Управляющие структуры Структуры выбора (if / else)
- •Структуры выбора (switch/case/default)
- •Структуры повторения (циклы)
- •Использование цикла for
- •Использование цикла do...While (постусловие)
- •Использование цикла while (предусловие)
- •Операторы передачи управления Оператор безусловного перехода goto
- •Оператор break
- •Оператор continue
- •Препроцессор языка Си
- •Массивы Объявление переменной массива
- •Использование индексной переменной
- •Инициализация массива при объявлении
- •Передача массивов в функции
- •Использование констант при объявлении массивов
- •Символьные строки
- •Массивы строк
- •Алгоритмы сортировки массива
- •Поиск заданного элемента в массиве
- •Указатели
- •Объявление указателя
- •Указатели на массивы
- •Операции над указателями
- •Указатели на строку
- •Указатели на функцию
- •Функции, возвращающие указатель
- •Указатели на многомерные массивы
- •Массивы указателей
- •Динамическое распределение памяти
- •Структуры данных
- •Реализация одних структур на базе других
- •Очередь
- •Операции над очередями
- •Операции над стеками
- •Ссылочные реализации структур данных
- •Операции над списками
Операции над указателями
Над указателями можно выполнять унарные операции — инкремент и декремент. При выполнении операций ++ и -- значение указателя увеличивается или уменьшается на длину типа, на который ссылается используемый указатель. Например:
int*aP,array[10];
аР=&а[5];
аР++; // Становится равным адресу элемента аггау[6]
--аР; // Становится равным адресу элемента аггау[5]
В бинарных операциях сложения и вычитания могут участвовать указатель и величина типа int. При этом результатом операции будет указатель на исходный тип, а его значение будет на заданное число элементов больше или меньше исходного. Например:
int*aPl, *aP2,array[10];
inti=2;
aPl=array+(i+4); // Становится равным адресу элементаarray[6]
aP2=aPl-i; // Становится равным адресу элемента аrrау [4]
В операции вычитания могут участвовать два указателя на один и тот же тип. Результат такой операции имеет тип int и равен числу элементов исходного типа между уменьшаемым и вычитаемым, причем если первый адрес младше, то результат имеет отрицательное значение. Например:
int *аР1, *аР2, array[10];
int i;
aPl=array+4;
aP2=array+9;
i=aPl-aP2; // Возвращено значение 5
i=aP2-aPl; // Возвращено значение -5
Значения двух указателей на одинаковые типы можно сравнивать в операциях ==, ! =, <, <=, >, >=, при этом значения указателей рассматриваются просто как целые числа, а результат сравнения равен 0 (ложь) или 1 (истина). Например:
int*aPl, *аР2, аrrау[10];
аР1=аrrау+5;
аР2=аrrау+7;
if(aPl>aP2) аrrау[3]=4;
В данном примере значение аР1 меньше значения аР2, и поэтому оператор array [3] =4 не будет выполнен.
Указатели на строку
При обработке строк указатели используются достаточно часто. Строка — это массив символов, оканчивающийся null-символом. В нижеприведенной программе определяется функция show_string() для вывода символов строки с помощью указателя на строку.
#include <stdio.h>
#include <conio.h>
void show_string(char *String) // Описание функции
{
while(*String) // Пока строка не пуста
putchar(*String++); // Выбирает первый символ из строки и выводит на экран
}
main()
{
show_string( "Example") ; // Передает в функцию некоторую строку
getch(); // Задерживает экран
return0; // Завершает программу
}
Переменная string объявлена в функции как указатель. Указатель увеличивается в простом цикле до тех пор, пока не встретится конец строки. Перед тем как вывести очередной символ, он определяется в функции посредством операции *. Затем указатель увеличивается, тем самым ссылаясь на следующий символ.
Указатели на функцию
В языке C++ сами функции не являются переменными, но имеется возможность определить указатель на функцию, который можно обрабатывать, передавать другим функциям, помещать в массивы и т. д.
Наиболее общее использование указателей на функции — возможность передать адрес функции в качестве фактического параметра другой функции. Указатели на функции объявляются следующим образом:
int(*F1) ();
long(*F2) ();
float(*F3) ();
Обратите внимание на скобки, охватывающие имена переменных. Без них приведенные объявления — это прототипы функций, которые возвращают указатель на указанный тип.