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

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

  • 相关阅读:
    C# Log4.Net日志组件的应用系列(二)
    C# Log4.Net日志组件的应用系列(一)
    使用TFS+GIT实现分布式项目管理
    动软代码生成器使用教程
    SVN使用教程
    windows系统重装流程
    使用纯真IP库获取用户端地理位置信息
    使用扩展方法重写.NET底层架构
    使用单例模式创建模型仓储层的唯一调用
    使用SQL Delta.v5.1.1.98.破解版同步数据结构
  • 原文地址:https://www.cnblogs.com/chenyg32/p/3772579.html
Copyright © 2011-2022 走看看