搜索
bottom↓
回复: 19

请教有关函数指针的问题

[复制链接]

出0入0汤圆

发表于 2014-11-6 14:49:42 | 显示全部楼层 |阅读模式
(3) typedef void (*Tran)(struct StateTableTag *me, Event const *e);

(4) typedef struct StateTableTag {
(5) Tran const *state_table;                  /* the State-Table */
(6) uint8_t n_states;                             /* number of states */
(7) uint8_t n_signals;                            /* number of signals */
(8) uint8_t state;                                /* the current active state */
(9) Tran initial;                                   /* the initial transition */
} StateTable;


这是QP中的一段C程序部分,其中typedef 声明了Tran。
问题来了但在(5)中 Tran const *state_table;  是什么意思呢?
还有如果我再声明一个 Tran State
哪跟Tran const *state_table;  有什么不同呢?
谢谢

/////////////////////////////////////////////////////////////////
根据我的了解 Tran const *state_table;   是一个函数指针
Tran State  应该是一个函数,我说得对不对呢 ???

出0入0汤圆

 楼主| 发表于 2014-11-6 15:03:07 | 显示全部楼层
或者
Tran const *state_table;   是一个函数指针
Tran State  也是一个函数指针。

出0入0汤圆

发表于 2014-11-6 15:47:57 | 显示全部楼层
查看人数不少,回帖人数没有,消灭0回复,虽然我看了帖子也混混沌沌的

出0入0汤圆

发表于 2014-11-6 15:52:07 来自手机 | 显示全部楼层
指向函数指针的指针?

出0入0汤圆

发表于 2014-11-6 16:09:24 | 显示全部楼层
Tran const *state_table;                  /* the State-Table */ 指向函数指针的指针,换句话说,*state_table 才是一个函数指针
Tran initial;                                   /* the initial transition */函数指针,类型就是由 typedef 定义的那个

出0入0汤圆

 楼主| 发表于 2014-11-6 16:10:49 | 显示全部楼层
dz46316740 发表于 2014-11-6 15:52
指向函数指针的指针?

我之前也这样想过但好像C没有指向函数指针的指针的吧?!

出0入0汤圆

 楼主| 发表于 2014-11-6 16:11:48 | 显示全部楼层
didadida 发表于 2014-11-6 16:09
Tran const *state_table;                  /* the State-Table */ 指向函数指针的指针,换句话说,*state ...

真的有? 我从来没见过有这样的用法

出0入0汤圆

 楼主| 发表于 2014-11-6 16:14:55 | 显示全部楼层
didadida 发表于 2014-11-6 16:09
Tran const *state_table;                  /* the State-Table */ 指向函数指针的指针,换句话说,*state ...

我之前也有想过你所说的但心里没底还是问朋友,但我非常怀疑我朋友所说的,但还是在坛里问一下DX吧。
谢谢你

出0入0汤圆

发表于 2014-11-6 16:19:13 | 显示全部楼层
kenson 发表于 2014-11-6 16:14
我之前也有想过你所说的但心里没底还是问朋友,但我非常怀疑我朋友所说的,但还是在坛里问一下DX吧。
谢 ...

指向函数指针的指针,你就这么想。我有一个数组,要存储一些函数指针。那么这个数组的数组名就是一个指向函数指针的指针(当然我说的可能不严谨,就是那个意思,你理解一下)

出0入0汤圆

发表于 2014-11-6 16:26:17 | 显示全部楼层
kenson 发表于 2014-11-6 16:10
我之前也这样想过但好像C没有指向函数指针的指针的吧?!

为什么没有?指针不就是个整数么(傻孩子就是这么教导的。。。),或者说一般来讲就是用来存储一个32位的地址。那么这个地址是变量的地址,还是函数指针的地址,c是完全允许的啊。而且通过指针的强制转换,就使得在间接引用指针的内容时,会以不同的“格式”读取。比如一般间接引用整型指针就读取4个byte,间接引用char型指针就读取一个byte,间接引用指向函数指针的指针就是读取4个byte的指针值(函数指针)

出0入0汤圆

 楼主| 发表于 2014-11-6 16:28:41 | 显示全部楼层
didadida 发表于 2014-11-6 16:19
指向函数指针的指针,你就这么想。我有一个数组,要存储一些函数指针。那么这个数组的数组名就是一个指向 ...

明白如果这样我可以定义指向函数指针的指针的数组Tran  *state_table[10] 是吧

出0入0汤圆

发表于 2014-11-6 16:31:58 来自手机 | 显示全部楼层
指向函数指针的指针,先去掉

出0入0汤圆

发表于 2014-11-6 16:32:21 | 显示全部楼层
kenson 发表于 2014-11-6 16:28
明白如果这样我可以定义指向函数指针的指针的数组Tran  *state_table[10] 是吧

可以啊,不过你定义这个有啥应用场景么。。。这个数组名已经相当于指向指针的指针的指针了(***)。。。一般只用到两层吧,也就是指向指针的指针(**),别给自己下绊子,写自己能看懂的代码

出0入0汤圆

发表于 2014-11-6 16:35:08 | 显示全部楼层
指向函数指针的指针,可以拆2部分开看,前面是类型,后面为指针

出0入0汤圆

发表于 2014-11-6 16:36:06 | 显示全部楼层
kenson 发表于 2014-11-6 16:28
明白如果这样我可以定义指向函数指针的指针的数组Tran  *state_table[10] 是吧

我没猜错的话,你应该是想定义这样的数组吧,Tran  state_table[10];

出0入0汤圆

 楼主| 发表于 2014-11-6 16:38:54 | 显示全部楼层
didadida 发表于 2014-11-6 16:32
可以啊,不过你定义这个有啥应用场景么。。。这个数组名已经相当于指向指针的指针的指针了(***)。。。 ...

谢谢你的提议,看QP好辛苦,理解抽象方面还是不完全,就对指针代码方面了解不深,因为没从书上见过这样的写法。

出0入0汤圆

发表于 2014-11-6 16:43:24 | 显示全部楼层
推荐你看一下这个教程,把指针的知识再捋顺一遍,基础很重要。推荐这个,是认为这个教程很好,内容也不是太多,但你如果看不下去英文,就去看c和指针之类的书吧

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2014-11-6 16:49:23 | 显示全部楼层
谢谢LS  3Q LS   

出0入0汤圆

发表于 2014-11-28 21:59:28 | 显示全部楼层
《C专家编程》

出0入0汤圆

发表于 2014-11-28 22:54:26 来自手机 | 显示全部楼层
指向函数指针的指针没听过,指向指针的指针总有听过吧?只不过指向的指针是个函数指针而已。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-8 18:28

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表