КАТЕГОРИИ:
АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
Проблема обмена информацией (данными) между функциями.
Объект, определенный в программе, обладает двумя свойствами. Это: - «время жизни» объекта – это время, в течение которого система гарантирует сохранность информации, записанной в его области памяти; - «область видимости» объекта – это область программы, в которой информация в памяти объекта доступна для обработки (для чтения и изменения).
Программа состоит из отдельных объектов – функций. Каждая функция – это независимая область памяти. Блок задается фигурными скобками { }. Тело функции ограничено блоком. Если объект–данное определен в блоке, то такой объект называется локальным объектом. Локальный объект «живет» в блоке, то есть записанная в нем информация не будет разрушена, пока блок активен, то есть выполняются его инструкции. Локальный объект, определенный в блоке «жив», но может быть не виден в нем. Локальный объект «виден» в блоке, то есть информация, записанная в нем, доступна для обработки, только в области памяти этого блока от точки определения объекта в инструкции его определения до конца блока, в котором он определен.
В этой функции fun «живут» локальные объекты a, b (два объекта), c, x.
Объект a определен в параметре, который получен по значению. Его область видимости – все тело функции fun. Объект b, определенный в параметре, получен по значению. Его область видимости – все тело функции fun, кроме области вложенного блока (желтое пространство). В этом блоке определен другой объект с именем b. Этот объект «живет» в этом вложенном блоке.Его область видимости от точки определения до скобки, закрывающей этот блок. Этот объект b закрывает в этом месте объект b, определенный в параметре. Объект b, определенный в параметрах функции fun, во вложенном блоке «жив», информация в нем не испорчена, но не доступна. Обратите внимание, что в инструкции return x + b;виден и используется тот объект b, который определен в параметрах. Объект х создан в инструкции определения float x;. Его область видимости от этой точки определения до конца блока, ограничивающее тело функции fun. В инструкции-выражении x = (a * b + c); не правомерно использован объект c. Он «живет» и виден во внутреннем блоке функции.
Отсюда можно сделать вывод: информация, записанная в области локальных объектов какой либо функции, недоступна другим функциям. Чтобы функции умели работать вместе, как одна целая программа, между областями памяти этих функций должен быть организован обмен информацией. Функция должна, каким то способом, получать информацию, которую ей предстоит обработать, от той функции, которая ее вызывает. Функция должна уметь вернуть результаты своей обработки той функции, которая ее вызвала. Есть несколько способов такого обмена информацией. Изучим эти способы.
|