struct 中使用函数指针有更简洁的方法吗?
我真的需要输入定义函数指针吗?我没有试过,但收到了类型错误。是否存在任何危害,或我做过的任何违反良好规范实践的事情?

#include <stdio.h>
#include <math.h>

void lineFunc(int* a)
{
    int x1 = a[0];
    int y1 = a[1];
    int x2 = a[2];
    int y2 = a[3];

   double length = sqrtf( pow( (x1-x2),2 )+ pow((y1-y2),2) );
   printf("%f\n", length);
}

void areaFunc(int* a)
{
   int base = a[0];
   int height = a[1];
   int area = base*height;
   printf("%d",area);
}

typedef   void (*Operation)(int* a );
typedef struct CALC_TYPE
{
   Operation  opt
} CALC;


int main()
{

    int lineArg[4] = {1 , 2, 3, 4}; //x1, y1, x2, y2
    int areaArg[2] = {5,10};    // base, height

    void (*lineCalc)(int*);
    void (*areaCalc)(int*);

   lineCalc = lineFunc;
   areaCalc = areaFunc;

   CALC line;
   CALC area;
   CALC* cmdArray = calloc(2,sizeof(CALC));


  line.opt = lineFunc;
  area.opt = areaFunc;

  cmdArray[0]=line;
  cmdArray[1]=area;

  cmdArray[0].opt(lineArg);
  cmdArray[1].opt(areaArg);

  return 0;

}

最佳答案

在结构中使用函数指针有更简洁的方法吗?
不。
我真的需要输入定义函数指针吗?
不,但它使您的代码可读性更高,因为函数指针的符号是神秘的。你本来可以写的。

typedef struct CALC_TYPE
{
    void (*opt) (int*);
} CALC;

是否存在任何危害,或我做过的任何违反良好规范实践的事情?
不是真的。制作一个只包含一个东西的结构是有问题的,但它显然是一个学习练习。

关于c - 围绕结构数组中的函数指针的讨论。什么是好习惯?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34548134/

10-11 18:40