这个声明"float (*x[20])(int *a)"是什么意思?

What this declaration "float (*x[20])(int *a)" means?

本文关键字:int 是什么 意思 声明 float      更新时间:2023-10-16

我在某处发现了这个奇怪的变量声明 -

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

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

float (*x[20])(*int a)不正确

。它应该是float (*x[20])(int *a)x声明为一个包含 20 个指针的数组,该函数接受int *类型的参数并返回 float


对于那些想知道函数指针数组使用法的人:

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 integersn"); 
    printf("Enter two integers: ");
    scanf("%lf %lf", &a, &b);
    printf("Choose an option:n 1. Addn 2. Subtractn 3. Multn 4. Dividen");
    scanf("%d", &option);
    result = p[option - 1](a, b); 
    printf("result = %lfn", 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; }

这里讨论了如何阅读/破译这种复杂声明的详细说明。

这是一个

函数指针数组。 它有 20 个函数指针项。

声明

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("%fn", x[i](a));

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