空指针与函数指针
空指针(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 }
顺便可参见以前写过的函数指针数组。
转载请注明出处http://www.cnblogs.com/chenyg32/