TI中文支持网
TI专业的中文技术问题搜集分享网站

关于结构体和函数指针的问题.

typedef struct
{
    void  (*calc)(void *);  // Pointer to calculation function

    int32  ref;             // PID给定,Q15
    int32  fdb;             // PID反馈,Q15

} PID_FUNC;

PID_FUNC pidFunc = PID_FUNC_DEFAULTS;  //

#define PID_FUNC_DEFAULTS         \
{                                 \
    (void (*)(void *))PidFuncCalc \
}

void PidFuncCalc(PID_FUNC *p)
{
   }                     

pidFunc.calc(&pidFunc);         // PID计算  

pidREF = pidFunc.ref; 

 

上面是结构体的定义和最后两句是用法,我不太懂的是

PID_FUNC pidFunc = PID_FUNC_DEFAULTS;  //是什么意思啊?函数指针能够等于结构体变量吗?不同的类型能这样吗?但事实上编译通过的,为什么?请指教。

Young Hu:

这种写法没有问题,pidFunc是结构体,可以赋值,将函数地址赋值到内部的函数指针。

typedef struct
{
    void  (*calc)(void *);  // Pointer to calculation function

    int32  ref;             // PID给定,Q15
    int32  fdb;             // PID反馈,Q15

} PID_FUNC;

PID_FUNC pidFunc = PID_FUNC_DEFAULTS;  //

#define PID_FUNC_DEFAULTS         \
{                                 \
    (void (*)(void *))PidFuncCalc \
}

void PidFuncCalc(PID_FUNC *p)
{
   }                     

pidFunc.calc(&pidFunc);         // PID计算  

pidREF = pidFunc.ref; 

 

上面是结构体的定义和最后两句是用法,我不太懂的是

PID_FUNC pidFunc = PID_FUNC_DEFAULTS;  //是什么意思啊?函数指针能够等于结构体变量吗?不同的类型能这样吗?但事实上编译通过的,为什么?请指教。

haosen ou:

回复 Young Hu:

这个PID_FUNC_DEFAULTS不是表示函数指针吗?如果结构体里面有两个函数那还能这样赋值吗?或者结构体里面函数的位置不是在第一个位置,还能这样赋值吗?把函数指针赋值给结构体变量,是把函数的首地址赋值给结构体的第一个成员吗?

typedef struct
{
    void  (*calc)(void *);  // Pointer to calculation function

    int32  ref;             // PID给定,Q15
    int32  fdb;             // PID反馈,Q15

} PID_FUNC;

PID_FUNC pidFunc = PID_FUNC_DEFAULTS;  //

#define PID_FUNC_DEFAULTS         \
{                                 \
    (void (*)(void *))PidFuncCalc \
}

void PidFuncCalc(PID_FUNC *p)
{
   }                     

pidFunc.calc(&pidFunc);         // PID计算  

pidREF = pidFunc.ref; 

 

上面是结构体的定义和最后两句是用法,我不太懂的是

PID_FUNC pidFunc = PID_FUNC_DEFAULTS;  //是什么意思啊?函数指针能够等于结构体变量吗?不同的类型能这样吗?但事实上编译通过的,为什么?请指教。

HY Dee:

回复 haosen ou:

这里仅仅是一个巧合,你将结构体中的内容换下顺序试试.

测试代码如下:

#include <stdio.h>typedef struct {int a;int b;void(*calc)(void *);
}TEST;void FuncCalc(TEST *p)
{p->a = 10;p->b = 20;
}#define TESTFUNC\
{\(void (*)(void *))FuncCalc\
}TEST test = TESTFUNC;int main(){test.calc(&test);printf("%d %d\n",test.a,test.b);return 0;
}

赞(0)
未经允许不得转载:TI中文支持网 » 关于结构体和函数指针的问题.
分享到: 更多 (0)