C установка IDE C структура програми C змінні C типи даних С функція printf C константи C арифметичні операції C операції порівняння і логічні операції C порозрядні операції C операції присвоювання C перетворення типів C умовні конструкції C цикли С масиви і рядки С функція scanf C препроцесор. Директива #include C #define директива C макроси C умовна компіляція C функції. Визначення та опис функцій C функції. Передача параметрів в функцію C функції. Повернення результату з функції C функції. Рекурсивні функції C область видимості змінних C зовнішні об'єкти C вказівники C вказівник. Операції з вказівниками C покажчики. Арифметика покажчиків C покажчики. Константи і покажчики C покажчики. Покажчики та масиви C покажчики. Масиви покажчиків, рядки і багаторівнева адресація C покажчики. Покажчики в параметрах функції C покажчики. Динамічна пам'ять C покажчики. Покажчик як результат функції C покажчики. Управління динамічної пам'яттю C покажчики. Покажчики на функцію C покажчики. Покажчики на функції як параметри і результати функцій C покажчики. Функції зі змінною кількістю параметрів C struct. Визначення структур C struct. Структури як елементи структур C struct. Покажчики на структури C struct. Масиви структур C struct. Структури і функції C struct. union об'єднання C struct. Бітові поля С file. Введення-виведення і робота з файлами C file. Читання і запис бінарних файлів C file. Читання і запис структур в файл C file. Читання і запис текстових файлів C file. Форматування вводу-виводу C file. Позиціонування в потоці C file. Консольне введення-виведення

C функції. Повернення результату з функції


У минулій темі була визначена функція factorial , яка в якості повертаючого типу мала тип void , тобто за фактом нічого не повертає:

void factorial(int n)
{
    int result = 1;
    for(int i=1;i<=n;i++)
    {
        result *= i;
    }
    printf("factorial of %d is equal %d \n", n, result);
}

Хоча ця функція не використовує явно оператор return , але компілятор сам його додає автоматично в кінець функції:

void factorial(int n)
{
    int result = 1;
    for(int i=1;i<=n;i++)
    {
        result *= i;
    }
    printf("factorial of %d is equal %d \n", n, result);
     
    return;
}

Ці обидва визначення фактично рівнозначні.

Але також функція може повертати якесь конкретне значення. Наприклад, змінимо функцію factorial , щоб вона повертала обчислене значення:

#include <stdio.h>
 
int factorial(int n)
{
    int result = 1;
    for(int i = 1; i <= n; i++)
    {
        result *= i;
    }
    return result;     // повертаємо обчислене значення зі змінної result
}

int main(void)
{
    int arg,f;
     
    arg = 4;
    f = factorial(arg);   // присвоюємо значення змінній яке повертає функція factorial(arg)
    printf("factorial of %d is equal %d \n", arg, f);
     
    arg = 6;
    f = factorial(arg);    // присвоюємо значення змінній яке повертає функція factorial(arg)
    printf("factorial of %d is equal %d \n", arg, f);
     
    return 0;
}

Тепер функція factorial як повертаючий тип має тип int . Якщо тип функції відмінний від void , то функція обов'язково повинна повертати значення даного типу. Для повернення значення застосовується оператор return , після якого вказується значення, що повертається.

В даному випадку функція factorial повертає значення змінно result , яка містить факторіал числа.

Якщо функція повертає якесь значення, то при її виклику ми можемо отримати це значення в змінну:

f = factorial(arg);

Як і у випадку з параметрами і аргументами функції, повертаюче значення має відповідати типу функції. Якщо такої відповідності немає, компілятор намагається виконати перетворення значення, що повертається до типу функції:

#include <stdio.h>
 
int exchange(double rate, double sum)
{
    return sum/rate;
}
 
int main(void)
{
    printf("%d \n", exchange(56.83, 24560));
     
    return 0;
}

В даному випадку функція exchange повертає об'єкт типу int , але значення, що описується виразом sum/rate представлятиме тип double , тому в даному випадку компілятор автоматично виконає перетворення:

return (int) sum/rate;

Наш партнер:
beta test mp3 playlist downloader