Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Metod_lab_GII.doc
Скачиваний:
10
Добавлен:
13.04.2015
Размер:
698.37 Кб
Скачать

Void main ( )

{

int (*fun) (int, int );

int x = 20, y = 5, z ;

fun = difference ; // Присвоювання адреси одного покажчика - іншому

z = fun (x, y);

cout << "z = " << z << еndl;

fun = sum; // Присвоювання нової адреси покажчика

z = fun (x , y );

cout << "z = " << z << endl;

}

int difference (int a , int b) // Опис функції

{ return (a - b);

}

int sum ( int a, int b )

{ return (a + b);}

Як і звичайні змінні, покажчики на функції можна об'єднати в масиви, наприклад, якщо описати функції, тобто їхні прототипи у вигляді:

Int god ( const void*, const void * ) ;

int chena ( const void*, const void *) ;

int nazv ( const void*, const void * ) ;

int avtor ( const void*, const void * ) ; ,

то можна описати функцію

int (*fcmp[4]) () {god, chena, nazv, avtor} ; .

У результаті вийшов масив функцій, доступ до елементів цього масиву звичайний, наприклад:

int i =0;

fcmp [i] ( pt1,pt2 ); // це виклик функції god ( pt1, pt2);

Варто звернути увагу, що замінивши індекс, можна викликати іншу функцію і т.д.

Крім повернення результату виконання функцій у вигляді даних за значенням, можливе також повернення за допомогою операцій разіменування "*" чи одержання адреси "&".

Операція разіменування "*" означає, що функція повертає адресу на об'єкт. Функції в такому випадку з'являються як покажчики на функцію, тобто в наступному вигляді:

type * fname (список формальних аргументів) .

Описані в такий спосіб функції повинні повертати покажчик на тип (адреса), наприклад:

сhar* dayweek (int data)

{

static char *weekday[ ] = {"Sunday", "Monday", "Tuesday",

"Weduesday", "Thursday", "Friday", "Saturday"}

return weekday [data % 7];

}

Тут функція dayweek одержує значення data, тобто число днів, що пройм

ли з якоїсь визначеної дати, і повертає день тижня у вигляді покажчика на char* оскільки weekday  це масив покажчиків на char , що належить типу char*.

Під час оголошення функції як покажчика на функцію результат можна передавати шляхом одержання адреси, що позначається "&". Така функція буде мати наступну структуру:

type *funame (список формальних аргументів)

{

static type x;

// далі виникає тіло функції

return &x;

}

Оскільки значенням покажчика є адреса, то функція може повернути адресу об'єкта того ж типу, що і тип покажчика, що повертається. Якщо необхідно повернути результат функції за посиланням, то переважніше використовувати операцію одержання адреси "&", і функцію описувати у вигляді :

type& funame (список формальних аргументів) .

5.2.2 Використання масивів - параметрів функцій

Як аргументи (параметрів) функцій можуть бути не тільки змінні, але і масиви. У цьому випадку можна використовувати як масиви фіксованого розміру, так і невизначеного (масиви змінної довжини). При використанні масивів фіксованої довжини в заголовку функції в списку формальних аргументів указується тип масиву і його розмір, наприклад:

vоid sort (int mas [ 30 ]); .

Якщо описується функція з масивом змінної довжини, то в заголовку вказується тип масиву невизначеного розміру, і обов'язково ще один параметр, за допомогою якого задається розмірність масиву, наприклад:

void sort ( int mas [ ], int n ) ; .

Усі масиви у функції передаються за адресою (як покажчики), тому у випадку зміни масивів у функції , ці зміни зберігаються при поверненні в зухвалу функцію.

Приклад 5.2 Навести приклад програмної реалізації , у якій відбувається передача символьного масиву у функцію .

//P5_2.CPP – використання масивів – параметрів функцій

#include < string.h >

#include < iostream >

using namespace std;

void fun1 (char st [15]);

int main ( )

{

char p[15] ="стіл ";

fun1 (p);

cout << "p=" << p << endl; // p="стілець "

return 0;

}

void fun1 ( char st[15] )

{

cout <<"p=" << st << endl; // стіл

strcpy (st, "стілець ");

}

Результати виконання програми :

р=стіл

р=стілець

Як параметри функцій можна використовувати не тільки одновимірні, але і багатовимірні масиви. При цьому використовуються масиви як фіксованої розмірності, так і невизначеної довжини.

При використанні багатовимірного масиву фіксованого розміру в заголовку функції вказуються значення розмірностей масиву, наприклад:

void fun1 (int mat [7][10]); // використовується матриця mat(7,10)

Якщо використовується багатовимірний масив невизначеної довжини, то невизначеним може бути тільки один вимір розмірності, що повинен бути першим, наприклад:

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]