• C语言中 指向函数的指针 简介



    引子:在学习CPrimerPlus的第十四章的14.13节中,遇到了如下三行文字,是有关指向函数的指针的,把我搞晕了。

    char * fump();              //返回指向char的指针的函数
    char (* frump)();           //指向返回类型为char的函数的指针
    char (* flump[3])();        //由3个指针组成的数组,每个指针指向返回类型为char的函数

    原来自己根本都不知道还有指向指针的函数,难怪自己懵逼了。参考了两篇博客(1.“http://blog.csdn.net/hzyong_c/article/details/7464202”  2.“http://blog.chinaunix.net/uid-22145625-id-1789465.html”),自己作一个理解和记录如下。


    1.函数是可以被指针指向的

    函数在编译时会被分配一个入口地址,调用函数其实就是通过 指向函数入口地址的指针 进行的。

    2.函数指针变量 的 声明、定义与调用

    声明格式为:返回类型 (*函数指针变量) (参数列表) 

    例如: int (* FunPtr) (int, int) 。该例子中,FunPtr为函数指针,指向的函数是这样的---输入两个int返回一个int。

    定义格式为:返回类型 (*函数指针变量) (参数列表) 

    例如: FunPtr = ∑ //sum是一个相符的函数,即int sum(int, int);

    调用格式为:(* 函数指针变量) (参数列表)

    例如:b = (* FunPtr) (3, 5);

    /* 为了体验函数指针的声明、定义和调用 */
    #include <stdio.h>
    int sum(int, int);
    
    int main (void)
    {
        int a, b;
    
        int (* FunPtr) (int, int);    //声明 FunPtr 是指向函数的指针,指向的函数具有两个int输入和一个int输出
        FunPtr = & sum;               //定义 FunPtr 指向的地址为函数 sum 的入口地址
    
        a = sum(3,7);
        b = (* FunPtr) (3, 7);        //调用函数指针 FunPtr
    
        printf("sum(3,7) = %d.
    (*FunPtr)(3,7) = %d
    ", a, b);
        return 0;
    }
    
    int sum(int x, int y)
    {
        return (x+y);
    }
  • 相关阅读:
    PTA 5-3 树的同构 ——理解递归
    停车管理系统
    两个有序链表序列的合并 (15分)
    lua 面向对象笔记 继承 和 组合
    二叉树高度计算,判定是否为平衡二叉树
    会用git的重要性,记工作中使用git reset 代码丢失的教训
    #include <bits/stdc++.h> 万能头文件
    C++中类的静态变量成员
    C++创建对象加括号和不加括号的区别
    deepin(深度系统)安装微信 qq
  • 原文地址:https://www.cnblogs.com/TomLily/p/6259867.html
Copyright © 2020-2023  润新知