zoukankan      html  css  js  c++  java
  • 理解函数指针(一)

    1.直接调用函数

    void fun(int x); //此处的声明也可写成:void fun( int );
    
    int main(int argc, char* argv[])
    {
        fun(10); //调用函数
    
        return 0;
    }
    
    /*定义*/
    void fun(int x)
    {
        printf(“%d
    ”,x);
    }

    2.函数指针

    void fun(int x); //也可写成:void fun( int );
    void (*fp)( int ); //声明一个函数指针,也可声明成void(*fp)(int x),但一般不这样。
    
    int main(int argc, char* argv[])
    {
       fun(10); //直接调用
       fp=&fun; //将fun函数的地址赋给fp指针变量,如果上边没声明,可以直接void (*fp)(int) = &fun;
       (*fp)(20); //通过函数指针变量fp调用。
    }
    
    /*fun函数*/
    void fun(int x) 
    {
       printf(“%d
    ”,x);
    }

    其实fun函数名是fun函数的头指针,区别是fun是指针常量,而fp是指针变量。和数组的头指针一样的意思。

    所以也可以这样写:

    void fun(int x); //也可写成:void fun( int );
    void (*fp)( int ); //也可申明成void(*fp)(int x),但一般不这样。
    
    int main(int argc, char* argv[])
    {
       (*fun)(10); //直接调用,函数名的指针方式
       fp=fun; //不用加&,
       fp(20); //函数指针的函数名一样的方式
    }
    
    /*fun函数*/
    void fun(int x) 
    {
       printf(“%d
    ”,x);
    }

    因为fun也是函数的头指针,所以(*fun)(10)方式也可以,因为这样写不方便,C语言设计者才设计成fun(10)的方式,所以指针变量fp(10)的方式也是OK的。

    把函数地址赋值给fp时,加不加&都是一样的效果,都是把函数头地址赋值给fp。可通过gdb检测。我测试了。

    注意:

    在声明时:

    void fun( int );    //不能写成void (*fun)( int )。
    void (*fp)( int );   //不能写成void fp( int )。

  • 相关阅读:
    ionic3 学习记录
    关于华为 IOT平台的框架理解
    遥测浮点数的计算 十进制浮点型转为十六进制浮点型
    关于104规约的认识补充
    Php 十六进制短浮点数转十进制,带符号位
    yii2 项目初始化
    java Socket启动服务
    ionic3 关于屏幕方向问题
    ionic3 cordova ionic-native插件
    java javac 的区别
  • 原文地址:https://www.cnblogs.com/leezhxing/p/4734926.html
Copyright © 2011-2022 走看看