Использование параметра - указателя

void fun2 (int *p)

{

++*р;

cout << "*p = " << *p << endl;

}

void main ( )

{

int x = 10;

fun2 ( &x );

cout << "x = " << x << endl;

}

В этом случае получаем тот же результат, т.е. р = 11их = 11.

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

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

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

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

 

static int x, y;или static float p = 3.25;

 

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

Таким образом, можно сделать заключения:

¾параметры функции передаются в нее по значению, поэтому за пределами функции они не изменяются, т.е. их нельзя использовать для передачи результата работы функции;

¾ при передаче результата функции за ее пределы используются: либо передача параметров по ссылке (); либо передача по указателю (), в этом случае во время обращения к функции применяется символ адреса &, т.е. ( ); либо в качестве параметра функции следует использовать глобальные переменные;

¾ локальные (обычные) переменные используются в теле функции, существуют только во время работы функции, а при выходе из нее уничтожаются, поэтому такие переменные называются автоматическими и их можно использовать только для преобразований внутри функции;

¾ если возникает необходимость сохранения значений локальных переменных между вызовами функции, то они должны быть объявлены как статические, т.е. с описанием static, например:

 

static char st[ ]= "Тесленко А.М.";

 

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

 

int minmas (int mas [ 50]); // Массив фиксированной длины

int minmas (int mas [ ], int n); //Массив переменной длины

 

¾ все массивы ¾ формальные аргументы передаются по адресу, т.е. как указатели;

¾ в начале программы записывается заголовок используемой функции, называемый прототипом , например: