Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 这是什么宣言;浮动(*x[20])(*int a)";方法_C - Fatal编程技术网

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