русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Передача параметров в функции по значению


Дата добавления: 2013-12-23; просмотров: 1723; Нарушение авторских прав


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

Использование значений параметров по умолчанию

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

Основные правила при использовании значений параметров по умолчанию:

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

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

Пример функции:

int summa(int a, int b=10, int c=5) // Параметры b и c имеют умалчиваемые значения

{

return a+b+c;

}

 

Примеры вызовов этой функции:

int i=2, j=5, s1, s2, s3;

s1=summa(i, 2, j); // Все параметры присутствуют s1=2+2+5=9

s2=summa(i, j); // Параметр с отсутствует s2=2+5+5=12

s3=summa(i); // Параметры b и c отсутствуют s3=2+10+5=17

 

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

void MyFun(int a)

{

a=100;

}

void main()

{

int a=10;

MyFun(a);

printf("a=%d", a); // Будет напечатано a=10

}

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



  Оперативная память
….. ….. …..   Стек
Переменная a=10
Копия a=100

 


Примечание. Стек(англ. stack — стопка) — структура данных, в которой доступ к элементам организован по принципу LIFO (англ. last in — first out, «последним пришёл — первым вышел»). В оперативной памяти выделяется специальный сегмент стека для временного хранения данных, который работает по такому же принципу.

На рисунке показано, что исходная переменная a может размещаться как в стеке – в данном примере, так оно и есть, так как переменная a локальная переменная функции main, так и за пределами стека, если бы a была бы глобальной переменной, в данном случае это не имеет значение, так как все равно функция работает с копией a.

Такой механизм передачи параметров в функцию называется передача параметров по значению (в стек копируется значение параметра).

 



<== предыдущая лекция | следующая лекция ==>
Определение, описание и вызов функции | Передача в функцию массивов, не являющихся строками


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.003 сек.