在结构内部定义指针函数

时间:2019-06-19 17:49:53

标签: c struct function-pointers

所以我试图完成其中带有指针函数的结构的编写,这就是我写的

typedef struct Coordinates {
    float x; 
    float y;
} Coord;

typedef struct Parallelograms {
        Coord upperR, lowerL;
        float base;
        float (*areaFunc)(float base, Coord upperR, Coord lowerL);
        float (*perimeter)(float base, Coord upperR, Coord lowerL);
} Parallelogram;

这是我定义函数的地方:

float area(float base, Coord upperR, Coord lowerL) {
    return (base*(upperR.y-lowerL.y));
}

然后在其他一些函数中,我这样称呼它:

Parallelogram para;   
para.areaFunc = area;

唯一的是,当我尝试打印时

printf("Area = %.2f", array[i].area);

(数组是对象的平行四边形类型的数组) 编译时返回此错误:

  

format指定类型“ double”,但参数         具有类型'float()(float,Coord,Coord)'(aka'float()(float,struct         坐标,结构坐标)')[-Werror,-Wformat]     ... printf(“#Area =%.2f#\ n”,array [I] .areaFunc);

我以为我的指针函数正确,那么如何将指针函数转换为应该返回的实际值呢?

1 个答案:

答案 0 :(得分:4)

如果arrayParallelogram的数组:

printf("Area = %.2f", array[i].areaFunc(array[i].base, array[i].upperR, array[i].lowerL));

您当前的代码试图将函数指针打印为浮点数,这显然是错误的。您需要调用所指向的函数。