【问题标题】:What this declaration "float (*x[20])(int *a)" means?这个声明“float (*x[20])(int *a)”是什么意思?
【发布时间】:2016-05-03 23:41:17
【问题描述】:

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

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

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

【问题讨论】:

  • typedef float func_t (int* a);然后声明func_t* array[20];是一种更笨的方式

标签: c++ c


【解决方案1】:

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 讨论如何阅读/破译这种复杂声明的详细说明。

【讨论】:

  • 有什么理由应该这样做吗?我看不出有什么用处。
  • @Flikk;我添加了一个函数指针数组的简单用法。
  • @hacks 谢谢,这是有道理的。到目前为止,我还没有使用过函数指针。不过,问题中的语法会是什么样子?我猜想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[] = { sum, subtract, mul, divide };
  • @hacks 所以如果我没有 typedef,我必须像 double sum(double, double); double subtract(double, double); double mul(double, double); double divide(double, double); 这样声明原型,或者有没有办法在没有 typedef 的情况下将它写得更短?
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    声明

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 2014-09-20
        • 2022-12-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-07-20
        • 2022-11-13
        相关资源
        最近更新 更多