Когда переменные передаются по значению, в функцию передается копия текущего значения этой переменной. Поскольку передается копия переменной, сама эта переменная внутри вызывающей функции не изменяется. Вызов по значению задан по умолчанию. Главным ограничением вызова по значению является то, что функция обычно возвращает только одно значение.
При вызове по ссылке в функцию передается адрес аргумента. Переменные в вызывающей функции могут быть изменены. Функция может возвращать более одного значения.
Примере: используется функция iadder() из предыдущего раздела. Переменные передаются в функцию по ссылке.
#include <stdio.h>
int iadder(int *pix,int *piy);
main()
{
int ia=23;
int ib=13;
int ic;
ic=iadder(&ia, &ib);
printf("The sum is: %d\n", ic);
return(0);
}
int iadder (int *pix,int *piy)
{
int iz;
iz=*pix+*piy;
return(iz);
}
В качестве аргументов при объявлении функций можно использовать переменные и указатели. Кроме переменных и указателей можно использовать ссылочный тип (reference). Ссылочный тип задает адрес, но не требует операции обращения по адресу.
Пример:
#include <iostream.h>
int iadder(int &rix,int &riy);
main()
{
int ia=23;
int ib=13;
int ic;
ic=iadder(ia, ib);
cout << "The sum is: " << ic << endi;
return(0);
}
int iadder(int &rix,int &riy)
{
int iz;
iz=rix+riy;
return(iz);
}
Функции также могут иметь класс памяти extern и static. Функция объявляется с классом памяти extern, если она описана в другом файле, внешнем по отношению к данной программе. Невозможно объявить функцию static так, чтобы к ней можно было обращаться извне, кроме как из файла, где она описана.
Область действия переменной, если она используется в функции, относится к диапазону, где эта переменная доступна. Переменные могут иметь следующие области действия: локальную, файловую или внутри класса.
Локальную переменную можно использовать в описании функции. Тогда ее область действия ограничена этой функцией. Эта переменная считается доступной или видимой только внутри функции и имеет локальную область действия.
Переменные с областью действия внутри файла объявляются вне отдельных функций или классов. Эти переменные доступны или видимы во всем файле, где они объявлены и являются глобальными.
Можно задать переменную с областью действия внутри файла, а затем включить ее в описание функции, сделав область ее действия локальной. В этом случае локальная область действия имеет приоритет над файловой. Имеется новое программное средство, называемое операцией уточнения области действия (::). Когда используется эта операция, выполняется обращение не к локальной переменной, а к переменной с областью действия внутри всего файла. Тогда переменная становится глобальной. Синтаксис обращения к глобальной переменной: