C 这是什么宣言;浮动(*x[20])(*int a)";方法
我在某处发现了这个奇怪的变量声明C 这是什么宣言;浮动(*x[20])(*int a)";方法,c,C,我在某处发现了这个奇怪的变量声明 float (*x[20])(*int a); 这可能意味着什么? 它的用途是什么?浮点(*x[20])(*int a)不正确。它应该是float(*x[20])(int*a),它将x声明为指向函数的20个指针数组,该函数采用int*类型的参数并返回float 对于那些想知道函数指针数组类型的人: typedef double Func(double, double); // Declare a double (double, doubl
float (*x[20])(*int a);
这可能意味着什么?它的用途是什么?浮点(*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 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; }
本文将详细介绍如何读取/解密此类复杂声明。这是一个函数指针数组。它有20个函数指针项。声明
float (*x[20])(int *a);
将变量x定义为20个函数(函数指针)的数组。依我拙见,它写得更清楚
Function x[20];
与
如果没有上下文,很难判断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));
代码应该是这样的:-
float(*x[20])(int*a)代码>-as(*int a)
似乎不正确。代码告诉我x是一个由20个指向函数的指针组成的数组,每个指针都接受一个数据类型为int的参数并返回float。有什么理由这样做吗?我看不出这有什么用。@Flikk;我添加了一个函数指针数组的简单用法。@haccks-Thx,这很有意义。到目前为止,我还没有使用过函数指针。但是,问题中的语法会是什么样子?我猜类似于double(*p[])(double a,double b)={sum,subtract,mul,divide}代码>。这种语法还需要什么?功能原型?还有别的吗?@Flikk;写double(*p[])(double a,double b)={sum,subtract,mul,divide}的更聪明的方法代码>是typedef double Func(double,double);Func*p[]={和,减,多,除}
@haccks,所以如果我没有typedef,我必须声明原型,比如double sum(double,double);双减法(double,double);双mul(双,双);双重划分(双重,双重)
或者有没有办法不用typedef将其写得更短?这是一种更愚蠢的书写方式typedef float func(int*a)代码>然后声明函数*数组[20]代码>
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));