问个结构定义的问题!急~~~·

youki1234 2007-05-17 07:42:31
有以下结构定义
struct nand_chip {
#ifdef CONFIG_MTD_NANDY
void (*hwcontrol)(int cmd);
void (*write_cmd)(u_char val);
void (*write_addr)(u_char val);
u_char (*read_data)(void);
void (*write_data)(u_char val);
void (*wait_for_ready)(void);
}
请问下这结构中的void (*hwcontrol)(int cmd);如何解释?是函数吗?在什么地方写相应的代码。
...全文
327 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
freeman868 2007-05-20
  • 打赏
  • 举报
回复
是一些函数指针,只要把一个跟它定义的返回类型和参数列表的函数的地址赋值给它,它就能像那个函数那样调用
netfirstman 2007-05-20
  • 打赏
  • 举报
回复
在上面声明在下面写
xlbdan 2007-05-18
  • 打赏
  • 举报
回复
写个简化版的楼主的程序,运行正常

#include <stdio.h>
struct ss
{
void (*p1)(int n); //指向返回类型为void,参数为int的函数指针p1
int (*p2)(); //指向返回类型为int,参数为空的函数指针p2
};
void f1(int n)      //f1
{
printf("f1,%d\n",n);
}
int f2() //f2
{
printf("f2\n");
return 0;
}
int main()
{
ss myss; //定义一个结构体对象
myss.p1=f1;   //为这个对象里的成员p1,p2赋值,让它们分别指向全局函数f1,f2
myss.p2=f2;
myss.p1(3); //通过myss对象里的函数指针p1,p2来调用全局函数f1,f2
myss.p2();
getchar();
return 0;
}
xlbdan 2007-05-18
  • 打赏
  • 举报
回复
struct nand_chip {
#ifdef CONFIG_MTD_NANDY
void (*hwcontrol)(int cmd);
void (*write_cmd)(u_char val);
void (*write_addr)(u_char val);
u_char (*read_data)(void);
void (*write_data)(u_char val);
void (*wait_for_ready)(void);
}

这个结构体的成员变量全是指向函数的指针,用第一个为例

void (*hwcontrol)(int cmd)表示hwcontrol是指向一个返回值为void,参数为int类型的函数指
针.例如: void f(int n){printf("hello");}

因为它们并不是函数,所以楼主说的"相应代码"是不存在的.你可以把它们看成类似于
char *p这样的成员,当然不需要代码

使用方法就是先定义一个结构体对象,再用这个指针指向一个对应类型的函数f,
如:

void f(int n){printf("hello");}
nand_chip a;
a.hwcontrol=f;

a.hwcontrol(3) 相当于  f(3)
todototry 2007-05-18
  • 打赏
  • 举报
回复
函数指针,指向相对应的类型函数
比如:
int sum(int i, int j)
{
return i + j;
}

指向它的函数指针
int (*PTRSUM)(int i, int j);

使用方法:
PTRSUM p = 0;
p = sum;
int k = p(3, 6);
freshui 2007-05-18
  • 打赏
  • 举报
回复
void (*wait_for_ready)(void);
函数指针
你给结构体赋值的时候用一个没有返回值和返回类型的函数名字给他就行
czdj2000 2007-05-18
  • 打赏
  • 举报
回复
linux 源代码里到处都是这种定义 呵呵
spofmy 2007-05-17
  • 打赏
  • 举报
回复
函数指针而已,如LS,把它当作成员指针变量看就行了
星羽 2007-05-17
  • 打赏
  • 举报
回复
把它们当成成员变量一样看就是了
  • 打赏
  • 举报
回复
都是函数指针,就是一个指针,用的时候需要将相对应的函数进行赋值
赋值后和函数就几乎一样了
leslielg 2007-05-17
  • 打赏
  • 举报
回复
hwcontrol是一个函数指针,函数参数int cmd,返回值void;在有电的设备上写代码,理论上讲都可以编译。
celftj 2007-05-17
  • 打赏
  • 举报
回复
它们仅仅是函数指针,不是函数,所以没有定义的.

它们可以指向类型相符的函数
星羽 2007-05-17
  • 打赏
  • 举报
回复
一堆函数指针

什么叫 在什么地方写相应的代码。

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧