zoukankan      html  css  js  c++  java
  • 函数指针

    1.函数指针的定义


      顾名思义,函数指针就是函数的指针。它是一个指针,指向一个函数。看例子:

    1
    2
    3
    A) char * (*fun1)(char * p1,char * p2);
    B) char * *fun2(char * p1,char * p2);
    C) char * fun3(char * p1,char * p2);

      

    看看上面三个表达式分别是什么意思?


    C)这很容易,fun3是函数名,p1,p2是参数,其类型为char *型,函数的返回值为char *类型。
    B) 也很简单,与C)表达式相比,唯一不同的就是函数的返回值类型为char**,是个二级指针。
    A) fun1是函数名吗?我们说数组指针这么定义或许更清晰:

    1
    int (*)[10] p;

    再看看A)表达式与这里何其相似!明白了吧。这里fun1不是什么函数名,而是一个指针变量,它指向一个函数。这个函数有两个指针类型的参数,函数的返回值也是一个指针。同样,我们把这个表达式改写一下:

    1
    char * (*)(char * p1,char * p2) fun1;

    这样子是不是好看一些呢?只可惜编译器不这么想。^_^。

    2.函数指针使用的例子


      上面我们定义了一个函数指针,但如何来使用它呢?先看如下例子:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    #include <stdio.h>
    #include <string.h>
     
    char * fun(char * p1,char * p2)
    {
      int i = 0;
      i = strcmp(p1,p2);
     
      if (0 == i)
      {
        return p1;
      }
      else
      {
        return p2;
      }
    }
     
    int main()
    {
      char * (*pf)(char * p1,char * p2);
      pf = &fun;
      (*pf) ("aa","bb");
      return 0;
    }

      我们使用指针的时候,需要通过钥匙(“*”)来取其指向的内存里面的值,函数指针使用也如此。通过用(*pf)取出存在这个地址上的函数,然后调用它。

      这里需要注意到是,在Visual C++6.0里,给函数指针赋值时,可以用&fun或直接用函数名fun。这是因为函数名被编译之后其实就是一个地址,所以这里两种用法没有本质的差别。这个例子很简单,就不再详细讨论了。

  • 相关阅读:
    2016.01.04接触spring一年开始读spring源码
    hibernate 各历史版本下载 spring各历史版本下载
    mongodb 安装使用遇到的问题记录
    EmEditor处理大文本文件
    linux的常用易忘命令
    签名的html
    添加用户-查看用户列表-禁止默认root登陆
    今天领导分享了一个探测端口的命令-linux下提示bash:command not found
    【原创】java 获取十个工作日之前或之后的日期(算当天)-完美解决-费元星
    Oracle 完全理解connect by-详细脚本-可实战
  • 原文地址:https://www.cnblogs.com/god-of-death/p/7753827.html
Copyright © 2011-2022 走看看