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

    空指针(void pointers)

      void 指针可以指向任意类型的数据。唯一的限制是被指向的值不能被直接引用(即不可以对它们使用解引符*),因为它的长度是不定的。

      因此,必须使用类型转换操作或赋值操作来把 void 指针指向一个具体的数据类型。

    #include <iostream>
    using namespace std;
    
    void increase(void* data, int type)
    {
        switch(type) 
        {
            case sizeof(char) : (*((char*)data))++; break;
            case sizeof(short): (*((short*)data))++; break;
            case sizeof(long) : (*((long*)data))++; break;
        }
    }
    
    int main()
    {
        char a = 5;
        short b = 9;
        long c = 12;
        increase(&a,sizeof(a));
        increase(&b,sizeof(b));
        increase(&c,sizeof(c));
        cout << (int)a << ' ' << b << ' ' << c << endl;    //6 10 13
    }
    View Code

    函数指针(Pointers to functions)

      函数指针即指向函数的指针。它最大的作用是把一个函数作为参数传递给另外一个函数。

      函数指针声明形式:

    int (*f)(int, int);

      传递函数参数的例子:

    #include <iostream>
    using namespace std;
    
    void add(int a, int b)
    {
        cout << a+b << endl;
    }
    
    void del(int a, int b)
    {
        cout << a-b << endl;
    }
    
    //函数指针del2指向函数del 
    void (*del2)(int, int) = del;
    
    //形参为函数指针,可接收不同的函数对象 
    void compute(int a, int b, void (*f)(int, int))
    {
        (*f)(a, b);
    }
    
    int main()
    {
        //实参可为普通函数名,因为函数名本身就是一个地址 
        compute(2, 3, add);        //5
        
        //同上 
        compute(2, 3, del);        //-1
        
        //实参为函数指针
        compute(4, 1, del2);    //3
    }
    View Code

       顺便可参见以前写过的函数指针数组

  • 相关阅读:
    开发应用资料大全
    shutil库文件的操作
    搭建appium自动化测试环境
    python实现语音录入识别
    go解析markdown转成html
    go指定分隔符格式化时间
    go语言中使用正则表达式
    django_websocket实现简单聊天室
    PyQt5显示日期选择框,获取日期保存文件
    python解决迅雷下载限制的方法
  • 原文地址:https://www.cnblogs.com/chenyg32/p/3772579.html
Copyright © 2011-2022 走看看