Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
прог.doc
Скачиваний:
3
Добавлен:
19.04.2019
Размер:
3.87 Mб
Скачать

28. Функции без аргументов. Функции с аргументами. Оператор return

Во общих чертах - это функция, для работы которой не нужны исходные данные.

Например, ввод строки или вывод меню.

Пример1. Вывод меню

void ShowMenu( void ) // вместо void в скобках можно ничего не писать

{

// а вот тип функции будет void - если она ничего не возвращает (возвращает тип void)

// Алсо, если перед именем функции ничего не написано, значит тип - int.

puts( "1. Ввести строку." );

puts( "2. Вывести строку." );

puts( "3. Выход." );

}

Аргумент - значение или ссылка на переменную, передаваемая функции для использования (если передается как значение) или изменения (если передается ссылка) внутри функции.

Для чего нужен - сама функция это отдельная подпрограмма, и использование данных из основной программы в ней возможно двумя путиями: передачей данных в виде аргументов или через глобальные (для всей программы) переменные. Второй способ - хуже (но иногда очень эффективен)

Что делает - то же, что и любая переменная в программе. Несет какое-то значение, которое используется в программе.

29. Использование указателей в качестве параметров функций

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

void f( int*, int* )

void main( )

{

int x = 5, y = 10;

printf( "x = %d, y = %d \n", x, y );

f( &x, &y )

printf( "x = %d, y = %d \n", x, y );

}

void f( int *y, int *x )

{

int t;

t = *y;

// ололо здесь какая-то байда с параметрами, я ее не записал)

// ну, допустим (на самом деле это не так уж и важно):

t++;

*x = 100500;

}

Если в качестве параметров функции используется массив, то внутрь попадает начальный адрес массива. (К.О.: адрес первого элемента этого массива)

Оператор return

Оператор return завершает выполнение функции, в которой он задан, и возвращает управление в вызывающую функцию, в точку, непосредственно следующую за вызовом. Функция main передает управление операционной системе. Формат оператора:

return [выражение] ;

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

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

Таким образом, использование оператора return необходимо либо для немедленного выхода из функции, либо для передачи возвращаемого значения.

Пример:

int sum (int a, int b) { renurn (a+b); }

Функция sum имеет два формальных параметра a и b типа int, и возвращает значение типа int, о чем говорит описатель, стоящий перед именем функции. Возвращаемое оператором return значение равно сумме фактических параметров.

Пример:

void prov (int a, double b) { double c; if (a<3) return; else if (b>10) return; else { c=a+b; if ((2*c-b)==11) return; } }

В этом примере оператор return используется для выхода из функции в случае выполнения одного из проверяемых условий.

Функции для строк

Для работы со строковыми функциями типа strcpy() нужно включить заголовочный файл STRING.H с помощью следующей строки:

#include <string.h>

1) strlen( строка )

эта функция вернет длину строки в символах (без нулевого байта). таким образом, strlen("hello") вернет 5.

2) strcpy( destination, source )

Оператор присваивания для строк не определен. Если c1 и c2 - символьные массивы, вы не сможете скопировать один в другой так:

c1 = c2; // так нельзя

Чтобы скопировать одну строку в другую, вместо использования оператора присваивания вызовите функцию копирования строк strcpy().

strcpy(c1,c2); // четкий и верный годный вариант

Оператор копирует символы, адресуемые указателем c2, в память, адресуемую указателем c1, включая нулевые байты.