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

      与一般的数据一样,函数在内存中也占有一定空间,所以函数也有“地址”的概念,函数指针就是指向这个“地址”(即函数代码块的起始地址),函数指针的type就是函数本身。知道了地址,我们很轻松的就能靠函数指针来完成函数调用。

    1、简单函数指针:

    1void add(int a, int b){  //这里写了一个很简单的函数
    2     cout << a + b << endl;
    3 }    
    1 void (*p1)(int a, int b);  //声明一个函数指针,指向的函数类型为“返回void,两个int参数”的函数
    2 p1 = add;            //赋值
    3 //void (*p1)(int a, int b) = add;    //也可以这样赋值,一个意思
    4 (*p1)(1, 2);          //这里是两种调用方法,出于某历史原因,这两者是等价的= =
    5 p1(1, 2);

    2、包含多个函数指针的数组:

    1 void (*p2[2])(int a, int b);  //声明
    2 p2[1] = add;            //赋值
    3 p2[1](2,3);            //调用,同样两种方法都可以
    4 (*p2[1])(3,4);

    3、指向包含多个函数指针数组的指针:
    稍微有一点点拗口,这个指针指向的是上一点中“包含多个函数指针的数组”。

    1 void (*(*p3)[2])(int a, int b);  //无非就是将p2用*p3代替
    2 p3 = &p2;              //指针赋值前必须要初始化
    3 (*p3)[1] = add;
    4 (*p3)[1](1, 2);          //调用
    5 ((*p3)[1])(1, 2);

    c++11可以很简单的这样直接定义:auto p3 = &p2; 代替了void (*(*p3)[2])(int a, int b)= &p2;

    4、返回值为函数指针的函数:

      这个语法是需要记住的:这个函数的名字是func,返回值是为一个拥有两个int参数、返回类型为int的函数指针:

    1 int (*func(char op)) (int , int)
    2 {
    3     return 1;
    4 }

    5、函数指针和typedef:

      typedef int (*fp)(int,int);  //定义一个函数指针类型,对应的是返回值为int,参数列表为两个int的函数

    1 int add(int a, int b)
    2 {
    3     return a + b;
    4 }

    假如有一个add函数,那么我们可以直接声明一个函数指针:

      fp myPtr=add;

    这样的话更符合我们一般的思维方式,这里fp相当于int,double这种类型。

  • 相关阅读:
    Bootsrap 的 Carousel
    Bootstrap 的 Tooltip 和 Popover
    JavaScript 继承
    Bootstrap 的 Collapse
    Bootstrap 组件之 Panel
    Bootstrap 组件之 List group
    Bootstrap 组件之 Nav
    使用 classList API
    Bootstrap 的 Dropdown
    Bootstrap 的 Modal
  • 原文地址:https://www.cnblogs.com/decade-dnbc66/p/5388995.html
Copyright © 2011-2022 走看看