这个声明"浮动(* x [20])(* int a)"手段?

时间:2016-01-27 06:32:39

标签: c

我发现了这个奇怪的变量声明

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

它可能意味着什么?
它的目的是什么?

4 个答案:

答案 0 :(得分: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

int 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

答案 1 :(得分:1)

这是一个函数指针数组。它有20个函数指针项。

答案 2 :(得分:1)

声明

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

将变量 x 定义为20个函数(函数指针)的数组。以我的拙见,它更清楚地写成

Function x[20];

typedef float (*Function)(int *a);

x 的目的很难说没有上下文,它可能是计算一个统计值,如平均值,方差或标准差等,给定一组整数和一个函数索引输入用户:

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));

答案 3 :(得分:0)

代码应如下所示:-float (*x[20])(int *a);-由于(*int a)似乎不正确。该代码告诉我x是一个由20个指针组成的数组,每个函数均接受数据类型为int的参数并返回float。