zoukankan      html  css  js  c++  java
  • 【C/C++】函数指针

    首先必须要清楚如下:

    【1】函数指针即函数的地址,也就是存储其机器语言代码的首地址。该地址用函数名表示。

    【2】用具体的函数名给函数指针变量赋值时必须满足两者的类型(即函数返回值类型)和特征标(即函数参数表的个数及对应数据类型)相同

    然后,相关语法如下:

    (1)函数指针变量pf的声明格式:返回类型 (*pf)(形参表);

    (2)函数指针赋值格式:pf=函数名;//赋值运算符两边的指针和函数应满足【2】

    (3)通过函数指针调用其指向的函数的格式:pf(实参表);

    [NOTE]:关于(3)的调用格式语法也可写成:(*pf)(实参表);//虽然与(3)的写法在逻辑上似乎是矛盾的,但是C++是允许的。就像《C++ Primer Plus》里

                               //讲这个矛盾时的一句话说的:容忍逻辑上无法自圆其说的观点正是人类思维的特点

                               //我个人比较喜欢用(3)的写法,因为这样用与“函数名本身表示函数的地址”这一点是对应的。

    如:

    int max(int*,int);

    int (*pf)(int*,int);

    pf=max;

    max(arr,10);//用函数名调用函数

    pf(arr,10);//用函数指针调用函数

    //[NOTE] arr是int数组名。

    完整示例函数:

     1 #include<iostream>
     2 using namespace std;
     3 
     4 int main()
     5 {
     6     int max(int*,int);
     7     int min(int*,int);
     8     void callfun(int (*pf)(int*,int),int*);//函数指针作为函数形参
     9     int p[10]={1,2,1,0,8,5,3,4};
    10     int (*pf)(int*,int);//声明函数指针
    11     pf=max;
    12     cout<<"max: "<<pf(p,10)<<endl;//通过函数指针pf调用函数max
    13     pf=min;
    14     cout<<"min: "<<pf(p,10)<<endl;
    15 
    16     callfun(max,p);//函数名max为实参
    17     callfun(min,p);
    18 
    19     return 0;
    20 }
    21 //---------------------
    22 void callfun(int (*pf)(int*,int),int *p)
    23 {
    24     cout<<pf(p,10)<<endl;
    25 }
    26 int max(int *pa,int n)
    27 {
    28     int m;
    29     m=pa[0];
    30     for(int i=0;i<n;i++)
    31         if(pa[i]>m)
    32             m=pa[i];
    33     return m; 
    34 }
    35 
    36 int min(int *pa,int n)
    37 {
    38     int m;
    39     m=pa[0];
    40     for(int i=0;i<n;i++)
    41         if(pa[i]<m)
    42             m=pa[i];
    43     return m; 
    44 }
  • 相关阅读:
    docker部署mysql Navicat远程连接
    window10安装nginx及请求转发到tomcat服务器访问项目及开机自启
    Keras笔记
    Spectral Clustering 并用silhouette指标值确定最优聚类数目
    Java Swing, paint(), paintComponent(), repaint()
    tensorflow(一):安装在Spyder上
    人工智能入门(七):artificial neural network
    人工智能入门(六):SVM
    人工智能入门(五):data mining的一些算法
    人工智能入门(四):uncertainty&基于统计的学习
  • 原文地址:https://www.cnblogs.com/wxiaoli/p/5556096.html
Copyright © 2011-2022 走看看