打印

类型转换问题

[复制链接]
1002|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
沙发
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 | 只看该作者
提示错误:函数类型转换不被允许。。。

使用特权

评论回复
5
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());

都是相同的提示:函数类型转换不被允许

使用特权

评论回复
6
ayb_ice| | 2014-1-8 08:13 | 只看该作者
开什么玩笑
KEIL C51结果

未命名.JPG (60.85 KB )

未命名.JPG

使用特权

评论回复
7
ayb_ice| | 2014-1-8 08:16 | 只看该作者
KEIL MDK结果

其中警告之前就是有的

未命名.JPG (37.65 KB )

未命名.JPG

使用特权

评论回复
8
jplzl10000|  楼主 | 2014-1-8 08:41 | 只看该作者

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

使用特权

评论回复
9
lhchen922| | 2014-1-8 09:26 | 只看该作者
typedef void(*pfunc)(void);

void msg_pfunc(void)
{
        printf("Hello pfunc...\n");
}
void test_func(void)
{
        printf("\ntest1....\n");
        unsigned int addr = (unsigned int)&msg_pfunc;
        ((void(*)(void))addr)();

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

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

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

test2....
Hello pfunc...

test3....
Hello pfunc...
Press any key to continue

使用特权

评论回复
10
jplzl10000|  楼主 | 2014-1-8 09:33 | 只看该作者
问题的关键在于:
在引用这个函数地址时,这个强制转换类型必须要是指针吧
即引用地址addr()时,addr类型必须是个函数指针类型
而不能是函数类型
用typedef表达的话,即是
typedef void (*pfn)(void)与typdef void (pfn)(void)的区别

使用特权

评论回复
11
xinzha| | 2014-1-8 09:47 | 只看该作者
((void (void))addr)(),这种写法编译器就不该认才对,不是函数指针的正确写法。

使用特权

评论回复
12
jplzl10000|  楼主 | 2014-1-8 09:47 | 只看该作者
typdef void (pfn)(void)
pfn *fun=led_test;
fun();
这样也是行的。
也还是证明在函数引用"()"符前的必须是指针吧?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

62

帖子

0

粉丝