Обмен данными между функциями через внешние переменные. — КиберПедия 

История развития хранилищ для нефти: Первые склады нефти появились в XVII веке. Они представляли собой землянные ямы-амбара глубиной 4…5 м...

Общие условия выбора системы дренажа: Система дренажа выбирается в зависимости от характера защищаемого...

Обмен данными между функциями через внешние переменные.

2017-11-17 276
Обмен данными между функциями через внешние переменные. 0.00 из 5.00 0 оценок
Заказать работу

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

 

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

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

Пример:

#include<iostream> //подключение системных средств для

using namespace std; //возможности использовать потоки ввода-вывода

void func (void);

void main (void)

{

int i;

for(i=0;i<5;i++)

func ();

return;

}

void func(void)

{

int a=0;

static int b=0;

cout<<a<<endl<<b<<endl; //а равна всегда 0, b растет на 1

a++;

b++;

return;

}

 

Способы передачи данных в функцию

 

Данные в функции передаются по значению, адресу или ссылке.

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

 
 

 


 

 

Передача данных по адресу.

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

 

 

 

 

Данное, переданное по адресу, можно использовать внутри функции и изменять.

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

 

Механизм передачи второго, третьего ……. Результата из функции.

 

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

Необходимо:

· Объявить в функции main переменную целого типа под результат.

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

· В имени функции и в прототипе объявить параметр указатель на целый тип.

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

 

То же самое схематично:

 

# include…..

void func (…, int*p);

void main (void)

{……………………….

Int res; //переменная целого типа под результат.

…………………………

…………………………

… func (…, & res); // передали в функцию адрес переменной res.

Printf (“res=%d\n”, res); //вывели полученный из функции результат

}

… funs (…, int*p)

{……………………….

Int res; //объявили переменную под результат

……………………….

Res=…; //вычислили результат

*p=res; // возвратили результат функции через параметр

return…;

}

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

Запретить изменение аргумента, при передаче адреса можно, для этого надо объявить параметр const int *p;

 


Поделиться с друзьями:

Типы сооружений для обработки осадков: Септиками называются сооружения, в которых одновременно происходят осветление сточной жидкости...

Историки об Елизавете Петровне: Елизавета попала между двумя встречными культурными течениями, воспитывалась среди новых европейских веяний и преданий...

Эмиссия газов от очистных сооружений канализации: В последние годы внимание мирового сообщества сосредоточено на экологических проблемах...

Двойное оплодотворение у цветковых растений: Оплодотворение - это процесс слияния мужской и женской половых клеток с образованием зиготы...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.006 с.