Pavloslav
Підписатись

Pavloslav

Приєднався: 3 роки тому | 0 Читає   1 Читачів | 8
  1. Питання тут, скоріше, в тому, як читати проголошення функцій (та змінних) в C. Історично склалося, що це дещо заплутано. Базове правило: читаємо від ідентифікатора, який визначається, спершу в дужках, потім праворуч, потім ліворуч; але групи ключових слів читаються разом зліва направо. Отже,

    const double * f1(const double ar[], int n);
    

    f1 - це функція, що приймає (список параметрів const double ar[], int n) - далі праворуч нема куди, читаєм ліворуч - яка повертає * - вказівник на const double.

    const double * (* func_ptr)(const double *, int);
    

    func_ptr - це:

    * - вказівник на

    (const double *, int) - функцію, що приймає параметри такого типу

    * - і повертає вказівник на

    const double

    int *ptr_array[10];
    

    ptr_array - це масив вказівників на int.

    int (*ptr_to_array)[10];
    

    ptr_to_array - це вказівник на масив з 10 int-ів.

    int (*func_array[10])(int x);
    

    func_array - це

    [10] - масив з 10

    * - вказівників на

    (int x) - функції, що приймають int

    int - і повертають int.

    int(*(*func_array1[10])(int x))(int);
    

    func_array1 - це

    [10] - масив з 10

    * - вказівників на

    (int x) - функції, що приймають int

    * - і повертають вказівник

    (int) - на функцію, що приймає int

    int - і повертає int.

    Через ці всі складнощі наполегливо раджу все, складніше за дві базові конструкції, проголошувати окремими типами за допомогою typedef або (в C++) using:

    typedef int (*IntFunc)(int x);
    

    IntFunc - це вказівник на функцію, що приймає int та повертає int

    IntFunc func_array[10];
    typedef IntFunc IntFuncGetter(int);
    IntFuncGetter func_array1[10];
    

    func_array та func_array1 визначені так само, як і раніше, але значно читаніше.

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