gpt4 book ai didi

c - 围绕结构数组中的函数指针的讨论。什么是好的做法?

转载 作者:太空宇宙 更新时间:2023-11-04 05:24:51 26 4
gpt4 key购买 nike

是否有更紧凑的方法在 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;

}

最佳答案

is there a more compact way for using function pointers inside a struct ?

没有。

Do I really need to type defining the function pointer?

不,但它使您的代码更具可读性,因为函数指针的表示法是神秘的。你可以改为写。

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

Are there any hazards, or anything that I've done that is against good code practice?

不是真的。制作一个只包含 1 个东西的结构是有问题的,但这显然是一个学习练习。

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com