类型转换问题

[复制链接]
1498|11
 楼主| jplzl10000 发表于 2014-1-7 10:38 | 显示全部楼层 |阅读模式
求教:
将一个unsigned int类型的地址,转换成void fun(void)函数类型
应该怎么写代码
xinzha 发表于 2014-1-7 15:03 | 显示全部楼层
你试一下用下面这个强转
(void (*)(void))
ayb_ice 发表于 2014-1-7 16:50 | 显示全部楼层
unsigned int add;

((void(*)(void))add)(); // 函数指针调用
 楼主| jplzl10000 发表于 2014-1-7 17:58 | 显示全部楼层
提示错误:函数类型转换不被允许。。。
 楼主| jplzl10000 发表于 2014-1-7 18:00 | 显示全部楼层
ayb_ice 发表于 2014-1-7 16:50
unsigned int add;

((void(*)(void))add)(); // 函数指针调用

我这样写的:
typdef void pfn(void);

((pfn)addr)();
((void (void))addr());

都是相同的提示:函数类型转换不被允许
ayb_ice 发表于 2014-1-8 08:13 | 显示全部楼层
开什么玩笑
KEIL C51结果

本帖子中包含更多资源

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

×
ayb_ice 发表于 2014-1-8 08:16 | 显示全部楼层
KEIL MDK结果

其中警告之前就是有的

本帖子中包含更多资源

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

×
 楼主| jplzl10000 发表于 2014-1-8 08:41 | 显示全部楼层

这是怎么回事,写成((void (*)(void))addr)();这样就行
写成((void (void))addr)();这样就不行呢,而且用pfn类型也不行

本帖子中包含更多资源

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

×
lhchen922 发表于 2014-1-8 09:26 | 显示全部楼层
  1. typedef void(*pfunc)(void);

  2. void msg_pfunc(void)
  3. {
  4.         printf("Hello pfunc...\n");
  5. }
  6. void test_func(void)
  7. {
  8.         printf("\ntest1....\n");
  9.         unsigned int addr = (unsigned int)&msg_pfunc;
  10.         ((void(*)(void))addr)();

  11.         printf("\ntest2....\n");
  12.         pfunc pfun = (pfunc)addr;
  13.         pfun();

  14.         printf("\ntest3....\n");
  15.         ((pfunc)addr)();
  16. }

  17. int main()
  18. {
  19.         test_func();
  20.         return 0;
  21. }
vc6.0运行的结果,,呵呵,学习了。。。
test1....
Hello pfunc...

test2....
Hello pfunc...

test3....
Hello pfunc...
Press any key to continue
 楼主| jplzl10000 发表于 2014-1-8 09:33 | 显示全部楼层
问题的关键在于:
在引用这个函数地址时,这个强制转换类型必须要是指针吧
即引用地址addr()时,addr类型必须是个函数指针类型
而不能是函数类型
用typedef表达的话,即是
typedef void (*pfn)(void)与typdef void (pfn)(void)的区别
xinzha 发表于 2014-1-8 09:47 | 显示全部楼层
((void (void))addr)(),这种写法编译器就不该认才对,不是函数指针的正确写法。
 楼主| jplzl10000 发表于 2014-1-8 09:47 | 显示全部楼层
typdef void (pfn)(void)
pfn *fun=led_test;
fun();
这样也是行的。
也还是证明在函数引用"()"符前的必须是指针吧?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

62

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部