zoukankan      html  css  js  c++  java
  • 函数指针

      程序中每个函数都位于内存中的某个位置,所以存在指向那个位置的指针------函数指针。

      函数指针最常用的两个地方是:转换表和作为参数传递给领一个函数。和其他的指针一样,对函数指针执行间接访问之前必须把它初始化为指向某个函数。

    int   f(int);
    int  (*pf)(int) = &f;

    这段代码告诉我们,创建了一个函数指针,并把它初始化为指向函数f。函数指针的初始化也可以通过一条赋值语句来完成。在函数指针初始化之前,具有f的原形是很重要的,否则编译器就无法检查f的类型是否与pf所指向的类型一致。

    初始化表达式中的&操作符是可选的,因为函数名被使用时总是有编译器把它转化为函数指针。&操作符只是显式的说明了编译器将隐式执行的任务。

    1 int ans;
    2 ans = f(25);
    3 ans = (*pf)(25);
    4 ans = pf(25);

    第2条语句是简单的调用函数f,但是它的执行过程确实很复杂的。函数名f首先被转换为一个函数指针,该指针指定函数在内存中的位置。然后函数调用操作符调用该函数,执行开始于这个地址代码。

    第3条语句是对pf执行期间间接访问操作,他把函数指针转换为一个函数名。这个转换并不是真正需要的,因为在编译器执行函数调用操作符之前又会把它转回去。这条语句和前一条语句完全一致。

    第4条语句和前两条语句效果一致。间接访问操作并非必须,因为编译器需要的是一个函数指针。

  • 相关阅读:
    angular的uiRouter服务学习(2)
    angular的uiRouter服务学习(1)
    angular学习笔记(三十一)-$location(2)
    angular指令中使用ngModelController
    angular中的表单数据自定义验证
    angular-ngSanitize模块-linky过滤器详解
    angular-1.3 之ng-model-options指令
    angular控制器的执行顺序和服务的注入情况
    angular五种服务详解
    .NET CORE EF 框架调用存储过程
  • 原文地址:https://www.cnblogs.com/newpanderking/p/3833928.html
Copyright © 2011-2022 走看看