- •Алгоритмы поиска
- •Последовательный поиск
- •Бинарный поиск
- •Инструкции
- •Предпроцессор. Заголовочные файлы. Директивы предпроцессора
- •Указатели
- •В иды указателей
- •Арифметика указателей
- •Указатель типа void*
- •Указатель на указатель
- •Указатель и ключевые слова const, volatile
- •Массивы
- •Примеры объявления массива
- •Инициализация массива
- •Неявная инициализация
- •Явная инициализация массива
- •Массивы и оператор sizeof
- •Трехмерные массивы
- •Связь массивов и указателей
- •Трехмерные массивы
- •Массивы указателей
- •Динамическое распределение памяти
- •Оператор new и массивы
- •Функции
- •Объявление (прототип) функции
- •Объявление inline-функции.
- •Определение
- •Вызов функции
- •Вызов inline – функции
- •2 Способ:
- •3 Пример:
- •Параметры значения
- •Параметры функции main
- •В озвращаемые значения
- •Ключевое слово const и функция
- •«Перегрузка» имен функции
- •Рекурсивные функции
- •Структуры c
Ключевое слово const и функция
Объявление параметров в теле функции с ключевым словом const обеспечивает не изменение объекта из тела функции
Параметр: либо ссылка, либо указатель.
void func (const char*pc);
main()
{
func («1234»);
}
void func (const char *pc)
{
*pc=’A’ // нельзя изменять, ошибка!
}
Замечание: при объявлении константных параметров ключевое слово const должно фигурировать как в объявлении функции, так и в определении.
«Перегрузка» имен функции
Одной из особенностей языка С является возможность перегрузки имен функции, т.е. использование одного и того же имени для разных функций. Иногда такой подход бывает очень удобен, когда функции выполняют одинаковые по смыслу действия. Компилятор различает такие функции по числу и типу параметров.
int maxint (int x, int y);
{
return(x>y)?x:y;
}
double maxdouble (double x, double y);
{
return (x>y)?x:y;
}
main()
{
int i=maxint (2,5);
double d=maxdouble (3.14, 2.718);
}
2.
int max (int x, int y)
{
return (x>y)?x:y;
}
doublemax (double x, double y)
{
return (x>y)?x:y;
}
main()
{
int i=max(2,5);
double d= max (3.14, 2.718);
double dd=max(3.14,9); // будет ошибка, компилятор не будет знать, какую функцию запускать
}
Правильнее: double dd=max(3.14,static_cast<double>(9));
Возможные конфликты при использовании перегрузки и параметров по умолчанию:
void f (int x, int y=0);
void f (int x);
main()
{
f(1,5);
f(4);
}
Рекурсивные функции
Это функции, вызывающие сами себя.
Каждое выполнение тела функции имеет свою область стека для параметров и локальной переменной.
Достоинства: компактность кода
Недостатки: увеличивает временные затраты, затраты в памяти
Специфика рекурсивных функций:
1) Необходимость обеспечения выхода
2) Желательно не использовать в функции локальные переменные, так как они забивают память
Факториал:
1 вариант:
int f(int x);
if (!x)
return 1
return x*f(x-1);
}
2 вариант:
int f(int x);
{
int a=1;
for(int i=2; i<x+1; i++)
a *=1;
return a;
}
Несмотря на большие затраты, преимущество начинает сказываться при работе со сложными структурами данных – деревьями, стеками.
Структуры c
В большом количестве случаев удобно обращаться к совокупности переменных, как к одному объекту. Логично такие переменные объединить.
Структуры языка C – это удобное средство для укрупнения данных. Объявление структуры – это описание компилятору шаблона, по которому он будет создавать объекты данного типа. При объявлении память не выделяется.
Struct имя_пользоват_типа
{
список полей структуры
};
struct ORC
{
char lname[30];
bool sexy;
int age
};
Создание объектов
Происходит так же, как создание переменной базового типа.
ORC Valentin;
Присваивание значения посредством оператора «.»
strcpy(Valentin.lname, «Rogkov»);
Valentin.sexy=false;
Valentin.age=rand()%5+1;
Создание массивов структур
ORC Valentin_Cloun[50];
for(i=0;i<50;i++)
{
Valentin_Cloun[i].sexy = (rand()%3)/2;
Valentin_Cloun[i].age=65+rand()%40;
}
Инициализация структур
ORC Valya [10]={{«RogkOFF, false, 4}, {“RogkOtrue,2},…..};
Структуры и функции
Структуры значительно облегчают процесс обмена данными между функциями. Без использования структур длинный список аргументов:
1) Делает программу нечитабельной
2) Увеличивает время на формирование параметров(создание копий в стеке)
3) Занимает место в стеке
Структуры могут быть переданы в функцию по значению и по адресу.