C++函数指针视频中的(targer->*handler)();

一片枫叶 Cocos2d-x基础-C++... 最后由 极客学院-Ukey 于2015年01月15日回复

  • 1 回答
  • 941 浏览

(targer->*handler)()这句没怎么看懂   handle是一个函数指针吧??  加()执行那个方法  是执行callater()方法吗????

  • 极客学院-Ukey 2015年01月15日 回答 #1楼
  • 指向函数的指针包含了函数的地址,可以通过它来调用函数。声明格式如下:

    类型说明符 (*函数名)(参数)

    其实这里不能称为函数名,应该叫做指针的变量名。这个特殊的指针指向一个返回整型值的函数。指针的声明笔削和它指向函数的声明保持一致。

    指针名和指针运算符外面的括号改变了默认的运算符优先级。如果没有圆括号,就变成了一个返回整型指针的函数的原型声明。

    例如:

    void (*fptr)();

    把函数的地址赋值给函数指针,可以采用下面两种形式:

    fptr=&Function;  fptr=Function;

    取地址运算符&不是必需的,因为单单一个函数标识符就标号表示了它的地址,如果是函数调用,还必须包含一个圆括号括起来的参数表。可以采用如下两种方式来通过指针调用函数:

    x=(*fptr)();  x=fptr();

    第二种格式看上去和函数调用无异。但是有些程序员倾向于使用第一种格式,因为它明确指出是通过指针而非函数名来调用函数的。下面举一个例子:

    void (*funcp)();  void FileFunc(),EditFunc();

    main()  {

    funcp=FileFunc;  (*funcp)();

    funcp=EditFunc;  (*funcp)();

    }  void FileFunc()

    {   printf("FileFunc ");

    }  void EditFunc()

    {  printf("EditFunc ");  }

    程序输出为:

    FileFunc  EditFunc

  • 0 评论