zoukankan      html  css  js  c++  java
  • 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);
    }
  • 相关阅读:
    UNIX网络编程--学习日记
    VC下ffmpeg例程调试报错处理
    Cholesky Decomposition
    [置顶] ORM框架Hibernate (二) 对象到关系多对一映射
    [置顶] rails2 升级到 rails3 过程详细记录
    python 连接MYSQL数据库(入门帖)
    【PAT】1005 Spell It Right
    Eclipse & MyEclipse下常用快捷键介绍
    HDU 2544
    你如何只用一个数组实现三个栈?
  • 原文地址:https://www.cnblogs.com/TomLily/p/6259867.html
Copyright © 2011-2022 走看看