#include<stdio.h>
int Va[8]={NULL};
void Val( )
{
( ( void (*)( ) ) Va[0] )( );
( ( void (*)( ) ) Va[1] )( );
( ( void (*)( ) ) Va[2] )( );
( ( void (*)( ) ) Va[3] )( );
( ( void (*)( ) ) Va[4] )( );
( ( void (*)( int ) ) Va[5] )( 4 );
( ( void (*)( ) ) Va[6] )( );
( ( void (*)( ) ) Va[7] )( );
}
void main()
{
Val();
}
大哥大侠高手们  问一下  这个函数起什么功能  是一个老外论坛上看到的  看的很迷惑  帮忙解释一下啊

解决方案 »

  1.   

    函数指针,每一个都指向Va[i]的值
    等价于这样
    typedef void (*func)();
    func=Va[0];
    func();
    具体干什么使得,不知道了
      

  2.   

    完整的是VA每一个值都是内存的地址  
    是不是VA[i]里所调用的是指向该地址的函数
    有没有API也能做到这样呢?
      

  3.   

    这个是函数指针的语法展示void (*)()表示一个返回值为空参数也为空的函数指针,也即指向形如void f()的函数指针
    (void (*)())外面加()是强制转换
    ((void (*)()) Va[0])是把Va[0]的值NULL,强制转换成上述类型的函数指针,也即强制编译器认为内存地址0是一个形如void f()函数的代码起始地址,外围的()是用来改变表达式优先级的
    ((void (*)()) Va[0])()最后加上尾部的(),就是函数调用了,即跳转到内存0地址开始执行函数调用但因为windows环境下内存地址0本身并不是代码,所以执行会出错,某些单片机的内存地址0有可能是引导程序