Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Main( ). doublerealadd(double, double);




Main()

{

int a = 0, b = 1;

float x = 2.0, y = 3.0;

double realadd(double, double);

a = intadd(a, b);

x = realadd(x, y);

}

intadd(a, b)

int a, b;

{

return (a + b); /* повертає значення типу int */

}

double realadd(x, y)

double x, y;

{

return (x + y); /* повертає значення типу double */

}

 

В прикладі функція intadd оголошена неявно з типом значення що повертається int, оскільки вона викликана до свого визначення. Компілятор не перевірятиме типи аргументів при виклику даної функції, тому що список типів аргументів для неї не заданий.

Функція realadd повертає значення типу double. В функції main є попереднє оголошення функції realadd. Тип значення що повертається (double), заданий у визначенні, відповідає типу значенню що повертається, заданому в попередньому оголошені. В попередньому оголошені також визначені типи двох параметрів функції realadd. Типи фактичних аргументів відповідають типам, що задані в попередньому оголошені, і також відповідають типам формальних параметрів у визначенні функції realadd.

1.1.3. Виклик функції.

Виклик функції передає управління і фактичні аргументи (якщо вони є) заданій функції.

Синтаксично виклик функції має вигляд:

<вираз> ([<список виразів>]);

<вираз> обчислюється, і його результат інтерпретується як адрес функції. Вираз повинен мати тип функція.

<список виразів>, в якому вирази ідуть через кому, представляє собою перелік фактичних аргументів, що передаються функції. Список виразів може бути пустим.

При виконанні виклику функції відбувається присвоєння значень фактичних аргументів формальним параметрам. Перед тим кожен фактичний аргумент обчислюється, над ним виконуються необхідні перетворення, і він копіюється в стек. Перший фактичний аргумент відповідає першому формальному параметру, другий – другому і т.д. Всі аргументи передаються по значенню, тільки масиви – по посиланню (див. масиви).

Приклад:

{

intadd(2, 3); /*Виклик функції intadd з передачею фактичних

аргументів 2, 3 заданій функції */

}

intadd(a, b) /*Визначення функції intadd з формальними аргументами

а, b */

int a, b;

{

....

}

 

В даному прикладі показано присвоєння фактичних аргументів 2, 3 формальним аргументам a, b функції intadd. Виклик функції в такому випадку робить наступні дії:

a = 2;

b = 3;

 

Таким чином формальний аргумент – змінна у програмі що викликається, а фактичний аргумент – конкретне значення, присвоєне цій змінній програмою що здійснює виклик. Фактичний аргумент може бути константою, змінною чи більш складним виразом.

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

1.1.4. Визначення функції.

Функція – самостійна одиниця програми, спроектована для реалізації конкретної задачі. Виконання програми завжди починається з команд, що містяться в функції main(), яка в свою чергу може викликати інші функції (getchar(), printf(), scanf() та ін.).

Визначення функції специфікує ім’я функції, атрибути її формальних параметрів, і тіло функції, що містить оголошення і оператори. У визначені функції також може задаватися клас пам’яті функції і тип значення що повертається.

Синтаксис визначення функції:

[<специфікація класу пам’яті>] [<специфікація типу>] <ім’я функції>

([<список аргументів>])

[<оголошення аргументів>]

<тіло функції>

У визначенні функції допускається вказівка специфікації класу пам’яті static чи extern (див. клас пам’яті).

Наявність списку аргументів і оголошень не є обов’язковою. Змінні, відмінні від аргументів, оголошуються в середині тіла функції.

Наприклад:

diff( x, y ) /* функція diff з аргументами x, y */

int x, y; /* оголошення аргументів x, y */

{

int a, b; / *оголошення змінних а, b */

....

}

 

Функції повинні мати той же тип, що і значення, які вони повертають в якості результатів. По замовчуванню передбачається що функції мають тип int. Якщо функція має інший тип, він повинен бути вказаний і в програмі що викликається, і в самому визначенні функції.

Наприклад:




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


Дата добавления: 2015-01-03; Просмотров: 334; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




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