void (*Aa)();//定义一个函数指针Aa
void Bb(u8 A,u8 B)//自定义的函数Bb
{
A++;
B++;
}
void main(void)
{
Aa = (void(*)(u32))Bb;//这个地方的写法我不太明白
Aa(1,1);
while(1)
{}
}
问题内容:Aa是一个指针,应该给他赋值的是一个地址, (void(*)(u32))Bb是把Bb地址取出来吗?这里为什么不能写成&Bb?希望详细解释一下 (void(*)(u32))Bb这句的含义。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
先看看百度void*的用法:
void * 以定义一个指针变量,但不说明它指向哪一种类型数据.
1. 传参:通用类型
可以作为函数模板,链表等参数的通用参数。在使用时,只需要强制类型转换就可以。
2.强制类型转换
有时候由于重载等的干扰,导致需要转换成void *,来进行取地址。
例如,(void *)obj.member,就可以取到member的地址;直接&(obj.member)取到的实际上是obj的开始地址。
3.指向0的地址
(void *)0,指向全是0的地址,相当于NULL。
非void类型显式转换为void类型表达式,用于避免一些代码静态检查工具的警告。
这个回答应该可以解决了为什么要在前面加个void *吧,楼上争论的有没有必要加参数,刚做了下实验,在函数有返回值的时候,定义指针时必须加参数的,如果是void无返回类型的,就不用必须加了,所以楼主的楼上的说的都是对的,我的一个test,你们看下。[mw_shl_code=applescript,true]#include "stdafx.h"
#include <stdlib.h>
typedef unsigned int u32;
u32 test(u32 a, u32 b)
{
会报错.
希望详细解释一下 (void(*)(u32))Bb这句的含义。
你要解释这个呀.
Bb本身一个地址.又不是变量.Aa = (void(*)(u32))Bb;// 这个地方做了强制转换.不然是要报错的.
一周热门 更多>