C语言之void 指针问题

来源:百度知道 编辑:UC知道 时间:2024/05/12 20:24:43
int download_addr;
void abc(void)
{
download_addr = 0x0c400000;
void (*fun)(void);

fun = (void (*)(void))download_addr;
(*fun)();
}

高手帮解释一下,这段是什么意思。
非常感谢两位lacuna和nickcart,今天这个问题总算彻底搞清楚了。
void abc(void);的功能本来是加载数据用的,可是程序的作者好像有点画蛇添足(这个把数据首地址转换成函数指针的功能在本程序中并无用到),其实我当时最不明白的就是,为什么把一组数据的初始地址强制换换成一个函数指针,是不是有别的什么机巧之处我没看出来

download_addr 是一个函数指针
void (*fun)(void); 定义一个函数指针func 输入参数为void返回类型为void
fun = (void (*)(void))download_addr;
这句话是将download_addr这个函数指针强制转换为参数为void返回类型为void的函数指针,然后赋值给func
最后一句就是要执行这个函数

lacuna解答的不错,我补充下下:最后函数的地址转变为0x0c400000,即绝对地址.也就是程序运行时于内存中固定位置了.