fgcx 发表于 2012-1-5 21:01:04

touch。h 语法请教

在touch.h中的定义如何解释?
typedef void (*rt_touch_calibration_func_t)(rt_uint16_t x, rt_uint16_t y); 我个不明白的。
if ((touch->calibrating == RT_TRUE) && (touch->calibration_func != RT_NULL))
      {
            /* callback function */
            touch->calibration_func(emouse.x, emouse.y);这个函数我也不明白,C太差了。
      }

ele_eye 发表于 2012-1-5 21:59:39

typedef void (*rt_touch_calibration_func_t)(rt_uint16_t x, rt_uint16_t y); 定义一个函数指针类型。

touch->calibration_func(emouse.x, emouse.y); 就是运行 此结构体中,此函数指针所指向的函数

fgcx 发表于 2012-1-6 09:36:40

学习了,还不知道typedef还有这个用法

fgcx 发表于 2012-1-7 22:23:30

回复【1楼】ele_eye
typedef void (*rt_touch_calibration_func_t)(rt_uint16_t x, rt_uint16_t y); 定义一个函数指针类型。
touch->calibration_func(emouse.x, emouse.y); 就是运行 此结构体中,此函数指针所指向的函数
-----------------------------------------------------------------------

我弄不清楚,它到底指向哪一个函数。的

fk2011 发表于 2012-1-9 15:45:19

看完下面程序,你应该明白了!可以复制到VC工程中编译,调试,这样理解透彻。

#include <stdio.h>
typedef void (*rt_touch_calibration_func_t)(int x, int y); //定义函数指针,注意:rt_touch_calibration_func_t相当于一种指针类型,它指向一个带有两个参数,并且返回值为void的函数。

void func(int m,int n)//定义一个func函数,注意函数名是指针!
{
printf("sum=%d\n",m+n);
}

struct Touch//定义一个结构体
{
char calibrating;
rt_touch_calibration_func_t calibration_func;//定义一个结构体成员变量。注意:变量类型为rt_touch_calibration_func_t,

                                                                     //变量名为 calibration_func,变量名可以换成其他名字。
};

void main()
{
struct Touch tch;//定义一个Touch结构体变量tch,给tch分配内存空间。该空间在内存的栈区

struct Touch *touch=&tch;//定义一个Touch结构体指针变量touch,指向tch。该指针变量空间在内存的栈区

touch->calibrating=1;   //给touch成员calibrating赋值
touch->calibration_func = func;//将已定义函数func的地址赋给touch成员calibration_func,注意func是一个地址

                                                 //不能这样赋值: touch->calibration_func = func(1,2);

tch.calibration_func(1,2);//调用成员calibration_func,实际上调用的是func 函数
touch->calibration_func(1,2);//由于touch指向tch,因此他们行为一致
}
页: [1]
查看完整版本: touch。h 语法请教