Питання тут, скоріше, в тому, як читати проголошення функцій (та змінних) в 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
Питання тут, скоріше, в тому, як читати проголошення функцій (та змінних) в C. Історично склалося, що це дещо заплутано. Базове правило: читаємо від ідентифікатора, який визначається, спершу в дужках, потім праворуч, потім ліворуч; але групи ключових слів читаються разом зліва направо. Отже,
f1 - це функція, що приймає (список параметрів
const double ar[], int n
) - далі праворуч нема куди, читаєм ліворуч - яка повертає*
- вказівник наconst double
.func_ptr
- це:*
- вказівник на(const double *, int)
- функцію, що приймає параметри такого типу*
- і повертає вказівник наconst double
ptr_array - це масив вказівників на int.
ptr_to_array - це вказівник на масив з 10 int-ів.
func_array - це
[10]
- масив з 10*
- вказівників на(int x)
- функції, що приймають intint
- і повертають int.func_array1 - це
[10]
- масив з 10*
- вказівників на(int x)
- функції, що приймають int*
- і повертають вказівник(int)
- на функцію, що приймає intint
- і повертає int.Через ці всі складнощі наполегливо раджу все, складніше за дві базові конструкції, проголошувати окремими типами за допомогою
typedef
або (в C++)using
:IntFunc - це вказівник на функцію, що приймає int та повертає int
func_array та func_array1 визначені так само, як і раніше, але значно читаніше.
Якщо ви зуміли дочитати до цього місця, то, гадаю, вам уже не буде проблемою прочитати визначення функцій у питанні.