- •Функции
- •Переменные, объявленные внутри функции, называются локальными
- •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-инструкцию),
- •// Отображение строки в обратном порядке с помощью рекурсии.
Функции
Функции — это строительные блоки C++, а потому без полного их понимания невозможно стать успешным С++-программистом.
Мы рассмотрим правила действия областей видимости функций, рекурсивных функций, некоторых специальных свойств функции main(), инструкции return и прототипов функций.
Переменные, объявленные внутри функции, называются локальными
В C++ переменные могут быть включены в блоки. Это означает, что переменную можно объявить внутри любого блока кода, после чего она будет локальной по отношению к этому блоку.
Самым распространенным программным блоком является функция. В C++ каждая функция определяет блок кода, который начинается с открывающей фигурной скобки этой функции и завершается ее закрывающей фигурной скобкой. Код функции и ее данные — это ее "частная собственность", и к ней не может получить доступ ни одна инструкция из любой другой функции, за исключением инструкции ее вызова. (Например, невозможно использовать
инструкцию goto для перехода в
#include <iostream> using namespace std; void f1();
int main()
{
char str[] = "Это - массив str в функции main().";
cout << str << '\n';
f1();
cout << str << '\n';
return 0;
}
void f1()
{
char str[80];
cout << "Введите какую-нибудь строку: ";
cin >> str;
cout << str << '\n';
}
int main()
{
int choice;
cout << "(1) сложить числа или ";
cout << "(2) конкатенировать строки?: ";
cin >> choice;
if(choice == 1) {
int a, b; /* Активизируются две int-переменные. */
cout << "Введите два числа: ";
cin >> а >> b;
cout << "Сумма равна " << a+b << '\n';
}
else {
char s1 [80], s2[80]; /* Активизируются две строки.
*/
cout << "Введите две строки: ";
cin >> s1;
cin >> s2;
strcat(s1, s2);
cout << "Конкатенация равна " << s1 << '\n';
}
return 0;
int main()
{
int choice;
cout << "(1) сложить числа или ";
cout << "(2) конкатенировать строки?: ";cin >> choice;
if(choice == 1) {
int a, b; /* Активизируются две int-переменные. */cout << "Введите два числа: ";
cin >> а >> b;
cout << "Сумма равна " << a+b << '\n';
}
else {
char s1 [80], s2 [80]; /* Активизируются две строки.
*/
cout << "Введите две строки: ";
cin >> s1; cin >> s2;
strcat (s1, s2);
cout << "Конкатенация равна " << s1 << '\n';
}
a = 10; // *** Ошибка *** Переменная а здесь
неизвестна!
#include <iostream> using namespace std; int main()
{
int i, j;
i = 10;
j = 100;
if(j > 0) {
int i; // Эта переменная i отделена от внешней переменной i.
i = j /2;
cout << "Внутренняя переменная i: " << i <<
'\n';
}
cout << "Внешняя переменная i: " << i << '\n';
return 0;
}
Вот как выглядят результаты выполнения этой программы.
Внутренняя переменная i: 50
Внешняя переменная i: 10
Локальные переменные не хранят своих значений между
активизациями.
#include <iostream> using namespace std; int main()
{
cout << "Введите число: ";
int a; // Объявляем одну переменную.
cin >> a;
cout << "Введите второе число: ";
int b; // Объявляем еще одну
переменную.
cin >> b;
cout << "Произведение равно: " << а*Ь << '\n';
return 0;
}
#include <iostream> using namespace std; int main()
{
// Переменная i локальная для цикла for.
for(int i=0; i<10; i++) {
cout << i << " ";
cout << "в квадрате равно " << i * i <<
"\n";
}
// i = 10; // *** Ошибка *** -- i здесь неизвестна!
return 0;
}