【发布时间】:2016-05-03 23:41:17
【问题描述】:
我在某处发现了这个奇怪的变量声明 -
float (*x[20])(int *a);
这可能意味着什么?
它的目的是什么?
【问题讨论】:
-
写
typedef float func_t (int* a);然后声明func_t* array[20];是一种更笨的方式
我在某处发现了这个奇怪的变量声明 -
float (*x[20])(int *a);
这可能意味着什么?
它的目的是什么?
【问题讨论】:
typedef float func_t (int* a);然后声明func_t* array[20];是一种更笨的方式
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 讨论如何阅读/破译这种复杂声明的详细说明。
【讨论】:
double (*p[ ])(double a, double b) = { sum, subtract, mul, divide }; 之类的东西。这种语法还需要什么?函数原型?还有什么?
double (*p[ ])(double a, double b) = { sum, subtract, mul, divide };的更聪明的方法是typedef double Func(double, double); Func *p[] = { sum, subtract, mul, divide };
double sum(double, double); double subtract(double, double); double mul(double, double); double divide(double, double); 这样声明原型,或者有没有办法在没有 typedef 的情况下将它写得更短?
代码应该是这样的: - float (*x[20])(int *a); - 因为(*int a) 似乎不正确。代码告诉我,x 是一个包含 20 个函数指针的数组,每个函数都接受一个数据类型为 int 的参数并返回 float。
【讨论】:
声明
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));
【讨论】:
这是一个函数指针数组。它有20个函数指针项。
【讨论】: