
- •Объявление функции
- •Статические переменные
- •Вызов функций с указателями в качестве параметра
- •Cсылка на структуру
- •Передача параметров по ссылке
- •Пример. Сумма элементов массива
- •Массив указателей на функцию (jump table)
- •Аргументы функции, передаваемые по умолчанию
- •Myfunc(15.1, 'a'); // передача явно заданных значений
Пример. Сумма элементов массива
Передается указатель на массив и число элементов массива
int sum(const int *mas, const int n);// прототип функции
const int n=10;
int main( ) // главная функция
{
int marks[n]={1,2,3,4,5};//частичная инициализация массива
cout<<”Сумма элементов массива”<<sum(marks, n);
// имя массива является адресом массива
return 0;
}
int sum(const int *mas,const int n)
{
int s=0;
for (int i=0;i<n;i++) s+=mas[i];
return s;
}
Пример 2. Значения массива изменяются в функции
const int k=5;
int mas[k]={0,0,0,0,0};
void f(const int k, int *mas1);
int main( )
{
f(k,mas);
for (int i=0;i<k;i++) cout<<mas[i]<<endl;
getch();
return 0;
}
void f(const int k,int *mas1)
{
for (int i=0;i<k;i++) mas1[i]=mas1[i]+i*i;
return;
}
Передача структур функциям
|
Пример
// Определение структуры
struct sample {
int a;
char ch;
} ;
void f1(sample parm); // прототип функции
int main()
{
struct sample arg; // объявление объекта структуры arg
arg.a = 1000;
arg.ch = 'X';
f1(arg);
return 0;
}
void f1(sample parm)
{
cout << parm.a << " " << parm.ch;
cout << "\n";
}
Cсылки на структуру
#include <iostream.h>
#include <conio.h>
struct my // описание структуры
{
int a,b;
}zzz;
my u;
void f(my ii, my &u) // передача параметров : ii –по значению
// u - по ссылке
{
u.a=ii.a+10;
u.b=ii.b+20;
}
int main( )
{
zzz.a=2;
zzz.b=5;
f(zzz, u);// вызов функции
cout<<u.a<<endl;
cout<<u.b<<endl;
getch();
return 0;
}
Указатель на функцию
|
Общий вид указателя на функцию
тип (*pfunc) (тип1 параметр1,…,тип N параметрN)
pfunc – указатель
тип – тип, возвращаемый функцией, на которую указывает pfunc
тип1,…,типN – типы параметров функции
Пример
double
f (double x);
double f1 (double x); //прототипы функций
double f2 (double x);
double ff (double (*pf) (double x));//указатель на функцию pf в качестве
//аргумента функции
double f (double x)
{
return x;
}
double f1 (double x)
{
return x*x;
}
double f2 (double x)
{
return x*x*x;
}
double ff (double (*pf) (double x))
{
return pf(3); // передача параметров осуществляется в теле функции
}
int main( )
{
double z=1.5,y;
double (*ptrf)(double x); // создание указателя на функцию
ptrf=f; //инициализация указателя- присвоение адреса функции f( )
y=(*ptrf)(z); // вызов функции f( ) через указатель(первый способ)
cout<<z<<" "<<y<<endl; // 1.5 1.5
y=ptrf(z); // вызов функции f( ) через указатель(второй способ)
cout<<z<<" "<<y<<endl; // 1.5 1.5
ptrf=sin;//инициализация указателя- присвоение адреса стандартной
// библиотечной функции sin
y=ptrf(z); // вызов функции через указатель(второй способ)
cout<<z<<" "<<y<<endl; // 1.5 0.997495
y=(*ptrf)(M_PI / 6.0); // вызов функции для вычисления sin (π/6)
//(первый способ)
cout<<z<<" "<<y<<endl; // 1.5 0.5
y=ff(f1); //вызов функции ff ( параметр - функция f1)
cout<< y<<endl; // 3*3=9
y=ff(f2); //вызов функции ff ( параметр - функция f2)
cout<< y<<endl; // 3*3*3=27
y=ff(cos);//вызов функции ff ( параметр- стандартная
// библиотечная cos
cout<< y<<endl; // -0,989992
y=ff(ptrf); //вызов функции ff ( параметр- стандартная
// библиотечная sin
cout<< y<<endl; //0.14112
getch();
return 0;
}