я нашел где-то это странное объявление переменнойЧто означает это объявление "float (* x [20]) (* int a)" означает?
float (*x[20])(*int a);
Что бы это могло означать?
Что это за цель?
я нашел где-то это странное объявление переменнойЧто означает это объявление "float (* x [20]) (* int a)" означает?
float (*x[20])(*int a);
Что бы это могло означать?
Что это за цель?
float (*x[20])(*int a)
не подходит. Он должен быть float (*x[20])(int *a)
, который объявляет x
как массив из 20 указателей на функцию, которая принимает аргумент int *
и возвращает float
.
Для тех, кому любопытно знать use массива указателей на функции:
typedef double Func(double, double); // Declare a double (double, double)
Func sum, subtract, mul, divide; // Function prototypes.
Func *p[] = { sum, subtract, mul, divide }; // Array of function pointers
double main(void)
{
double result;
double a, b;
int option;
printf("This is a simple calculator to add, subtract, multiply and divideide two integers\n");
printf("Enter two integers: ");
scanf("%lf %lf", &a, &b);
printf("Choose an option:\n 1. Add\n 2. Subtract\n 3. Mult\n 4. Divide\n");
scanf("%d", &option);
result = p[option - 1](a, b);
printf("result = %lf\n", result);
}
double sum(double a, double b) { return a+b; }
double subtract(double a, double b) { return a-b; }
double mul(double a, double b) { return a*b; }
double divide(double a, double b) { return a/b; }
подробное объяснение о том, как читать/расшифровать такое сложное заявление обсуждается here.
это массив указателей функций. он имеет 20 пунктов указателя функции.
Декларация
float (*x[20])(int *a);
определяет переменную х как массив из 20 функций (указатели на функции). По моему скромному мнению, это более ясно написано, как
Function x[20];
с
typedef float (*Function)(int *a);
Цель х трудно сказать, без контекста, то это может быть, чтобы вычислить статистическую величину как среднее, дисперсия или стандартное отклонение и т.д. задан множество целых чисел и вход индекса функции со стороны пользователя:
x[0] = Average;
x[1] = Variance;
x[2] = StandardDeviation;
...
int a[100];
int i;
/*read data into `a' and function index into i...*/
printf("%f\n", x[i](a));
Это тупее способ написания 'ЬурейиЙ поплавок func_t (интермедиат * а) ; 'затем объявить массив func_t * [20];' – Lundin