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

4.4. Локальные переменные

Внутри тела функции можно объявлять собственные переменные. Эти переменные называются локальными. Формальные параметры функции тоже считаются локальными переменными. Локальные переменные объявляются подобно другим переменным.

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

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

4.5. Глобальные переменные

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

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

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

Выполним Пример 4.2 с использованием глобальных переменных.

#include <iostream.h>

#include <stdlib.h>

void Quantity(); //Прототип функции Quantity

int k = 0; //Глобальная переменная k

long Number; //Глобальная переменная Number

int main()

{

cout << "Enter number: ";

cin >> Number;

cout<<"Number: " << Number << endl;

Quantity(); //Вызов функции Quantity

cout<<" Quantity: "<< k<<endl;

system("pause");

return 0;

}

void Quantity()

{

while (Number)

{

k++;

Number = Number / 10;

}

}

4.6. Аргументы функции

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

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

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

Ссылки

В языке Си++ ссылка определена как другое имя (псевдоним) уже существующей переменной. Определение ссылки:

ИмяТипа & ИмяСсылки = Инициализатор;

Например,

int x;

int &y=x;

Тогда имена x и y –это синонимы одной и той же переменной. Поэтому операторы

x += 1; и y += 1; равносильны.

После инициализации значение ссылки изменить нельзя, она всегда "смотрит" на ту переменную, с которой она связана инициализацией.

Самостоятельное использование переменных ссылочного типа не имеет практического применения. Основные достоинства ссылок проявляются при работе с функциями.

Ссылочный тип удобно использовать для возврата значений из функции. В этом случае ссылочный тип используется следующим образом:

-в заголовке функции параметры-результаты записываем как переменные ссылочного типа, то есть с символом &;

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

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

Таким образом, параметры-ссылки являются другими именами им соответствующих аргументов. Поэтому параметр-ссылка не требует выделения отдельной памяти.

Пример 4.4. Для каждой пары введенных целых чисел найти их сумму и произведение двумя способами:

- с помощью одной функции SumMult типа void , которая возвращает и сумму, и произведение двух чисел;

- с помощью двух функций Sum, Mult с одним результатом типа int, одна из которых возвращает сумму, а вторая – произведение двух целых чисел.

#include <iostream.h>

#include <stdlib.h>

void SumMult (int , int , int &, int &); //Прототип функции SumMult

int Sum ( int , int ); //Прототип функции Sum

int Mult (int , int ); //Прототип функции Mult

int main()

{

int a, b, r1, r2;

while( true )

{

cout<<"Vvedi a, b"<<" (a=0 b=0 -->exit)"<<endl;

cin>>a>>b;

if ( !(a || b)) break;

SumMult ( a, b, r1, r2); //Вызов функции SumMult

cout<<a<<" + "<<b<< " = "<<r1<<endl;

cout<<a<<" * "<<b<<" = "<<r2<<endl;

cout<<a<<" + "<<b<<" = "

<<Sum( a, b )<<endl; //Вызов функции Sum

cout<<a<<" * "<<b<<" = "

<<Mult( a, b )<<endl; //Вызов функции Mult

}

system("pause");

return 0;

}

void SumMult ( int x, int y, int &s, int &p) //Функция SumMult

{

s=x+y;

p=x*y;

}

int Sum ( int x, int y) //Функция Sum

{

return x+y;

}

int Mult ( int x, int y) //Функция Mult

{

return x*y;

}

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

#include <iostream.h>

#include <stdlib.h>

void Change ( int &, int &); //Прототип функции Change

int main()

{

int a, b, c;

cout<<" a= "; cin>>a;

cout<<" b= "; cin>>b;

cout<<" c= "; cin>>c;

if ( a > b ) Change ( a, b ); //Вызов функции Change

if ( b> c ) Change ( b, c );

if ( a > b ) Change ( a, b );

cout<<" a = " << a << " b = "<< b <<" c = "<< c;

system("pause");

return 0;

}

void Change ( int & x , int & y) //Функция Change

{

int temp;

temp = x;

x = y;

y = temp;

}

Подключение заголовочных файлов

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

#include <ИмяФайла.h>

Так, например, основные математические функции находятся в файле math.h. Для их использования в начале текста программы следует включать строку

#include<math.h>

Функция system находится в файле stdlib.h. Для использования данной функции включаем строку

#include<stdlib.h>.