空指针与函数指针

空指针(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

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

posted @ 2014-06-06 14:25  Norcy  阅读(2511)  评论(0编辑  收藏  举报