- •Функции
- •Переменные, объявленные внутри функции, называются локальными
- •int main()
- •int main()
- •Вот как выглядят результаты выполнения этой программы.
- •Локальные переменные не хранят своих значений между
- •Важно!
- •Формальные параметры
- •Глобальные переменные
- •Глобальная переменная создается путем ее объявления вне какой бы то ни было функции.
- •Если глобальная и локальная переменные имеют одинаковые имена, то преимущество находится на стороне
- •// структура объявления функций не возвращающих значений
- •структура объявления функций возвращающих
- •/*область 1 - объявление функций до начала main()
- •// место для объявления прототипов функций
- •// синтаксис объявления прототипа
- •bool palindrom5(int number)
- •// программа-тренажер по выполнению сложения.
- •void drill()
- •■ Глобальные переменные занимают память в течение всего времени выполнения программы, а не
- •// Передача функции указателя.
- •// Передача указателя функции -- исправленная
- •Если массив является аргументом функции, то необходимо понимать, что при вызове такой функции
- •void display(int num[])
- •void display(int *num)
- •Результаты выполнения этой программы
- •Результаты выполнения этой
- •// Одна из версий функции strlen().
- •Длина строки
- •Аргументы функции main():
- •Аргумент командной строки представляет собой информацию, указываемую в команде (командной строке), предназначенной для
- •Параметр argc имеет целочисленный тип и предназначен для хранения количества аргументов командной строки.
- •Параметр argv представляет собой указатель на массив символьных указателей.
- •name Том
- •Чтобы получить доступ к отдельному символу в одном из аргументов командной строки, при
- •Обычно аргументы argc и argv используются для ввода в
- •При передаче программе числовых данных в качестве аргументов командной строки эти данные принимаются
- •Для преобразования аргументов командной строки во внутреннее представление здесь используется стандартная библиотечная функция
- •Чтобы сложить два числа, используйте командную строку такого вида
- •Return
- •Инструкцию return можно использовать с некоторым заданным значением либо без него.
- •void power(int base, int exp)
- •void f()
- •Каждая функция, кроме типа void, возвращает какое-нибудь значение. Это значение явно задается с
- •Если функция, тип которой отличен от типа void, завершается в результате обнаружения закрывающейся
- •int find_substr(char *sub, char *str)
- •Функцию можно объявить так, чтобы она возвращала значение любого типа данных, действительного для
- •Поскольку print_vertical()
- •Функции, которые возвращают
- •char *find_substr(char *sub, char *str)
- •При выполнении этой версии программы получен следующий результат.
- •Прототипы функций
- •Прототипы позволяют компилятору выполнить следующие три важные операции.
- •Общая форма прототипа функции аналогична ее определению за исключением того, что в прототипе
- •void sqr_it(int *i); // прототип функции int main()
- •Рекурсивная функция — это функция, которая вызывает сама
- •// Итеративная версия. int fact(int n)
- •Если рекурсивная функция factr() вызывается с аргументом, равным 1, то сразу возвращает значение
- •Когда функция вызывает сама себя, в системном стеке выделяется память для новых локальных
- •При возвращении каждого рекурсивного вызова из стека извлекаются старые локальные переменные и параметры,
- •Слишком большое количество рекурсивных обращений к функции может вызвать переполнение стека. Поскольку локальные
- •При написании рекурсивной функции необходимо включить в нее инструкцию проверки условия (например, if-инструкцию),
- •// Отображение строки в обратном порядке с помощью рекурсии.
Если рекурсивная функция factr() вызывается с аргументом, равным 1, то сразу возвращает значение 1. В противном случае она возвращает произведение factr(n-
1) * n.
Для вычисления этого выражения вызывается метод factr() с аргументом n-1.
Этот процесс повторяется до тех пор, пока аргумент не станет
Когда функция вызывает сама себя, в системном стеке выделяется память для новых локальных переменных и параметров, и код функции с самого начала выполняется с этими новыми переменными.
Рекурсивный вызов не создает новой копии функции.
Новыми являются только
При возвращении каждого рекурсивного вызова из стека извлекаются старые локальные переменные и параметры, и выполнение функции возобновляется с "внутренней" точки ее вызова. О рекурсивных функциях можно сказать, что они "выдвигаются" и "задвигаются".
Слишком большое количество рекурсивных обращений к функции может вызвать переполнение стека. Поскольку локальные переменные и параметры сохраняются в системном стеке и каждый новый вызов создает новую копию этих переменных, может настать момент, когда память стека будет исчерпана.
В этом случае могут быть
При написании рекурсивной функции необходимо включить в нее инструкцию проверки условия (например, if-инструкцию), которая бы обеспечивала выход из функции без выполнения рекурсивного вызова.
Если этого не сделать, то, вызвав однажды такую функцию, из нее уже нельзя будет вернуться. При работе с рекурсией это самый
// Отображение строки в обратном порядке с помощью рекурсии.
#include <iostream> using namespace std; void reverse(char *s); int main()
{
char str[] = "Это тест";
reverse(str);
return 0;
}
// Вывод строки в обратном порядке. void reverse(char *s)
{
if(*s)reverse(s+1);
else return;
cout << *s;
}