Void swap(int a,int b)

{

int temp=a;

a=b;

b=temp;

}

Main()

{

int x=3,y=6;

swap(x,y);

printf("x=%d,y=%d',x,y);

}

Результат роботи: x=3, y=6. Обмін не відбувся. Дійсно, у функції swap утворилися локальні копії фактичних параметрів-змінних x та y, вони помінялись місцями в тілі функції, а у функції main усе залишилось без змін. Для досягнення необхідного нам результату треба передати у функцію swap адреси відповідних змінних і здійснити обмін з їх використанням:

void swap(int a,int*b)

{

int temp=*a;

*a=*b;

*b=temp;

}

Main()

{

int x=3,y=6;

swap(&x,&y);

printf("x=%d,y=%d',x,y);

}

Масиви передаються у функції через адресу першого елемента, тому записи формального параметра у вигляді char*s, char s[10] та char s[ ] еквівалентні.

Компілятор виконує неявні перетворення типів формальних параметрів. Не може бути формального параметра типу, меншого ніж int, серед цілих типів, і ніж double – серед плаваючих.

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

Функції зі змінною кількістю параметрів

У мові С допускається сигнатура функції вигляду

(<тип1>ident1,<тип2>ident2,...)

Остання конструкція визначає функцію зі змінною кількістю параметрів. При виклику такої функції має бути вказана кількість параметрів, не менша від кількості явно заданих у визначенні:

Float (int a,int b,...)

{ …

}

...

a=f(1,2,4,4); /*вірно*/

a=f(1,2); /*вірно*/

a=f(2) /*невірно*/

Допускається також сигнатура вигляду

<СПКП><тип><опусивач>(...).

При цьому функція може мати довільну кількість параметрів, аж до їх відсутності.

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


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: