zoukankan      html  css  js  c++  java
  • C/C++函数指针,指针函数的用法,用处

     先看函数指针
    int func2(int x);    /* 声明一个函数 */
    int (*q2) (int x);   /* 声明一个函数指针 */
    q2=func2;        /* 将func函数的首地址赋给指针f */
    int c=(*q2)(3);   //3可以为任意实参
     
    上面4句基本说明了函数指针的用法:
    函数指针是指向函数的指针,确切的说,是指向特定类型函数的指针(函数与函数指针 类型要匹配)
    函数指针用来保存函数首地址,即可以通过该指针访问函数。函数指针相当于取别名
    函数指针可以指向一类函数,而不是一个函数,即可以重新赋值。(见例2)
     
    函数指针不难,只要记住上面黑体字就差不多了,附上两个简单的例子
    例1:
    #include<stdio.h>
    int max(int x,int y){ return(x>y?x:y); }
    void main()
    {
    int (*ptr)(int, int);
    int a,b,c;
    ptr=max;
    scanf("%d%d",&a,&b);
    c=(*ptr)(a,b);
    printf("a=%d,b=%d,max=%d",a,b,c);
    }
    View Code

    例2:

    #include<stdio.h>
    void FileFunc()
    {
    printf("FileFunc
    ");
    }
    void EditFunc()
    {
    printf("EditFunc
    ");
    }
    void main()
    {
    typedef void (*funcp)();
    funcp pfun= FileFunc;
    pfun();
    pfun = EditFunc;
    pfun();
    }
    View Code
    再看指针函数:
    int *func(int x);/* 声明一个指针函数 */
    int *q; /* 声明一个指针 */
    q=func(3);//3可以为任意实参
     
    上面三句基本说明了指针函数:
    指针函数是返回值为指针的函数,所以我们在main()中调用它时可以用一个同类型的指针来接收。
    指针函数可以用来解决众多问题,如返回多个值的问题。(见"函数返回多个值的方法"那篇文章)
    指针函数比经常更经常用到,一定要学会用
     
    指针函数逻辑简单,结构清新,功能强大,质量好,效率高,堪比极品中的凤姐,胜过。。。(求下联),反正不学会真是损失。
     
    例3也是百度来的,个人觉得很经典,涉及到了指针,数组指针,指针函数,二维数组的赋值,函数返回多个值,数组指针的自增与指针自增的区别。。。众多知识。看懂这个基本指针这一块差不多了。
     
    例3:
    #include<iostream>
    using namespace std;
    int main()
    {
    float *find(float (*p)[4],int m);//查询序号为m的学生的四门课程的成绩
    float score[][4]={{50,51,52,55},{70,70,40,80},{77,99,88,67}};//定义成绩数组,第一维可以为变量
    float *pf=NULL;//定义一个指针时一定要初始化
    int i,m;
    
    //cout<<"请输入您想查询的学生的序号:";
    
    cin>>m;
    pf=find(score,m);//返回为一维数组指针,指向一个学生成绩
    for(i=0;i<4;i++)
    cout<<*(pf+i)<<" ";
    cout<<endl;
    return 0;
    }
    float *find(float (*p)[4],int m)
    {
    float *pf=NULL;
    pf=*(p+m);//p是指向二维数组的指针,加*取一维数组的指针
    return pf;
    }

    pf=*(p+m);//p是指向二维数组的指针,加*取一维数组的指针

    这句很经典。

  • 相关阅读:
    javaDSA实现加密和解密(签名和验证)
    javaRSA实现加密解密
    javaBase64加密解密
    javaApacheMd5AndSHA1加密
    javaDES加密算法
    javaSHA1实现加密解密
    Time dependent Entire Hierarchy
    BI的需求调研的方法分类
    BW Query Design中实现Key figure排序
    后勤模块PROCESS KEY 的激活及查看
  • 原文地址:https://www.cnblogs.com/anwcq/p/C_zhizhenhanshu.html
Copyright © 2011-2022 走看看