空指针(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
}
函数指针(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
}
顺便可参见以前写过的函数指针数组。