2016-01-27 4 views
0

я нашел где-то это странное объявление переменнойЧто означает это объявление "float (* x [20]) (* int a)" означает?

float (*x[20])(*int a); 

Что бы это могло означать?
Что это за цель?

+1

Это тупее способ написания 'ЬурейиЙ поплавок func_t (интермедиат * а) ; 'затем объявить массив func_t * [20];' – Lundin

ответ

12

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.

+0

Спасибо. Понял. –

+0

есть ли какая-то причина? Я не вижу ничего полезного для этого. – Flikk

+0

@Flikk; Я добавил одно простое использование массива указателей функций. – haccks

1

это массив указателей функций. он имеет 20 пунктов указателя функции.

1

Декларация

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)); 
Смежные вопросы