Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПЯВУ - методичка1.doc
Скачиваний:
8
Добавлен:
08.11.2019
Размер:
683.52 Кб
Скачать

Пример. Составить функцию обмена значениями между переменными X и y. Верным решением является применение передачи данных по адресу.

Программа:

void Obmen (int *px, int *py) /* список указателей */

{ int r = *px; /* перестановка */

*px = *py; /* значений */

*py = r ; /* переменных */

}

void main ( ) /* главная функция */

{ int x=20; y=30; /* исходные данные */

Obmen (&x , &y); /* передача адресов аргументов */

printf (“x=%d y=%d” , x, y) /* вывод результатов */

}

Результат программы: x=30 y=20

Использование способа передачи значений при вызове функции Obmen не изменяет значений переменных x и y, поскольку функция при этом способе работает с копиями аргументов.

Вызов функции с передачей адресов аргументов позволяет разрабатывать функции, имеющие доступ к массивам и другим протяженным объектам данных. Если в список параметров включено имя массива, то в функцию передается только адрес начала массива.

Пример. Разработать функции копирования строки из одного места памяти в другое. Возможны разные варианты функций, решающих эту задачу на основе алгоритмов рассмотренных выше.

  1. Использование массива:

void copystring (char st1[ ], char st2[ ]) /* параметры – массивы */

{ int i;

for (i=0 ; st2[i] = st1[i]; i++); } /* цикл по элементам массива */

2. Использование указателей:

void copystring (char *st1, char *st2) /* параметры – указатели */

{ while( *st2++ = *st1++); } /* цикл по указателям */

  1. Использование указателей и элементов массива:

void copystring (char *st1; char *st2) /* параметры – указатели */

{ int i;

for (i=0; st2[i] = st1[i]; i++); } /* цикл по элементам массива */

Прототип (шаблон) функции

Порядок расположения функций в программе определяется следующим правилом: объект описывается или объявляется раньше, чем он используется.

Обычно главную функцию main ( ) стараются расположить в начале программы, поскольку она описывает общий алгоритм решаемой задачи и с нее начинается выполнение программы. Для того чтобы не нарушить общее правило использования функций, перед функцией main( ) располагают прототипы (шаблоны) функций, описание которых следует за функцией main( ).

Прототип повторяет заголовок функции, за которым ставится разделитель точка с запятой (;), то есть вводится пустой оператор вместо тела функции. Компилятор не требует задания имен параметров в прототипе, поскольку проверяет только соответствие типов данных прототипа и описания функции.

Пример. При использовании прототипа одной из функций копирования строки, рассмотренных выше, копирование символов из строки str1 в строку str2 может выполнить следующая программа:

#include<stdio.h>

#include<conio.h>

void copystring (char st1[ ], char st2[ ]); /* прототип функции */

void main ( ) /* главная функция */

{ char str1[80], str2[80]; /* массивы для строк */

clrscr( ); /*очистка экрана */

puts (“Введите строку (<80 символов)”);

gets (str1); /* ввод строки */

copystring (str1, str2); /* вызов функции */

puts (“Скопированная строка:” );

puts (str2); /* вывод строки */

}

void copystring (char st1[ ], char st2[ ]); /*описание функции */

{ int i;

for (i=0; st2[i]=st1[1]; i++); /* цикл копирования */

}