
- •Объявление функции
- •Статические переменные
- •Вызов функций с указателями в качестве параметра
- •Cсылка на структуру
- •Передача параметров по ссылке
- •Пример. Сумма элементов массива
- •Массив указателей на функцию (jump table)
- •Аргументы функции, передаваемые по умолчанию
- •Myfunc(15.1, 'a'); // передача явно заданных значений
Функции
|
Объявление функции
тип имя_функции (тип1 параметр1,…,типN параметрN);//прототип
// функции
или
тип имя_функции (тип1,…,типN ); );//прототип функции
тип имя_функции (тип1 параметр1,…,типN параметрN)
{
тело функции
}
|
Разные способы описания функции | ||
1-способ |
2-способ |
3-способ |
int max (int a, int b); int max (int a, int b) { if (a>b) return a; else return b; } |
int max (int, int); int max (int a, int b) { if (a>b) return a; return b; } |
int max (int, int);//прототип int max (int a, int b) { return (a>b)? a:b; }
|
Варианты основной функции main() | |
1 вариант |
2 вариант |
int main( ) { int x=10; int y=5; // вызов функции max(x,y) cout<<max(x,y)<<endl; // обязательно надо возвратить целое // число return 0; } |
void main( ) { int x=10; int y=5; // вызов функции max(x,y) cout<<max(x,y)<<endl;
return ; //или может // отсутствовать } |
При вызове функции в стеке выделяется место для формальных параметров функции, в которое заносится значение фактического параметра. Далее функция использует и изменяет значения в стеке. Таким образом, фактические параметры не изменяются. При выходе из функции измененные значения теряются. Это пример вызова по значению (call-by-value) |
Пример, когда локальные значения не теряются.
Статические переменные
#include <iostream.h> void f(int a) { int m=0; cout <<”n m p\n”; while (a--) { static int n=0; // будет изменяться int p=0; //не будет изменяться cout<<n++<<’ ‘<<m++<<’ ‘<<p++<<’\n’; } } int main() {f(3); f(2); return 0;} |
n m p 0 0 0 1 1 0 2 2 0 n m p 3 0 0 4 1 0 |
Статическая переменная n
|
Пример с использованием статической переменной
Подсчет среднего арифметического
#include <iostream.h>
float avr_number(float var)
{
static float sum=0; // накапливается сумма
static int number=0; // накапливается количество введенных чисел
sum+=var;
number++;
return sum/number;
}
int main( )
{
float a=0;
while (true) // организация бесконечного цикла
{
cout<<"Input a ( 0 - for exit) ";
cin>>a;
if (!a) break;
cout<<avr_number(a)<<endl;
}
return 0;
}