- •Функции
- •Переменные, объявленные внутри функции, называются локальными
- •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-инструкцию),
- •// Отображение строки в обратном порядке с помощью рекурсии.
void f()
{
// ...
switch(с) {
case 'a': return;
case 'b': // ...
case 'c': return;
}
if(count<100) return;
// ...
}
Каждая функция, кроме типа void, возвращает какое-нибудь значение. Это значение явно задается с помощью инструкции return. Другими словами, любую не void-функцию можно использовать в качестве операнда в выражении. Следовательно, каждое из следующих выражений допустимо в C+ +.
х = power(у);
if(max(х, у)) > 100) cout << "больше";
#include <iostream>
#include <cstdlib> using namespace std; int main()
{
int i;
i = abs(-10); // строка 1
cout << abs(-23); // строка 2
abs(100); // строка
return 0;
}
Если функция, тип которой отличен от типа void, завершается в результате обнаружения закрывающейся фигурной скобки, то значение, которое она возвращает, не определено (т.е. неизвестно).
#include <iostream> using namespace std
int find_substr(char *sub, char *str); int main()
{
int index;
index = find_substr("три", "один два три четыре");
cout << "Индекс равен " << index; // Индекс равен 9.
return 0;
}
int find_substr(char *sub, char *str)
{
int t;
char *p, *p2;
for(t=0; str[t]; t++) {
p = &str[t]; // установка указателей
p2 = sub;
while(*p2 && *p2==*p) { // проверка
совпадения
p++; p2++;
}
/* Если достигнут конец р2-строки (т.е.
подстроки), то подстрока была найдена. */
if(!*p2) return t; // Возвращаем индекс
подстроки.
}
return -1; // Подстрока не была обнаружена.
}
Функцию можно объявить так, чтобы она возвращала значение любого типа данных, действительного для C++ (за исключением массива: функция не может возвратить массив). Способ объявления типа значения, возвращаемого функцией, аналогичен тому, который используется для объявления переменных: имени функции должен предшествовать
#include <iostream> using namespace std;
void print_vertical(char *str); int main(int argc, char *argv[])
{
if(argc==2) print_vertical(argv[1]);
return 0;
}
void print_vertical(char *str)
{
while(*str)
cout << *str++ << '\n';
}
Поскольку print_vertical()
объявлена как void-функция, ее нельзя использовать в выражении. Например, следующая инструкция неверна и поэтому не скомпилируется.
х = print_vertical("Привет!"); // ошибка
Функции, которые возвращают
указатели
Функции могут возвращать указатели. Указатели возвращаются подобно значениям любых других типов данных и не создают при этом особых проблем. Чтобы вернуть указатель, функция должна объявить его тип в качестве типа возвращаемого значения.
#include <iostream> using namespace std;
char *find_substr(char *sub, char *str); int main()
{
char *substr;
substr = find_substr("три", "один два три четыре");
cout << "Найденная подстрока: " << substr;
return 0;
}