一、void*
void指针可以指向任意类型的数据,亦即可用任意数据类型的指针对void指针赋值。
int *pint; void *pvoid; pvoid = pint; /* 不过不能 pint = pvoid; */如果要将pvoid赋给其他类型指针,则需要强制类型转换如:pint = (int *)pvoid;小心使用void指针类型
按照ANSI(AmericanNationalStandardsInstitute)标准,不能对void指针进行算法操作,即下列操作都是不合法的:
void*pvoid; pvoid++;//ANSI:错误 pvoid+=1;//ANSI:错误
在实际的程序设计中,为迎合ANSI标准,并提高程序的可移植性,我们可以这样编写实现同样功能的代码:
void*pvoid; (char*)pvoid++;//ANSI:正确;GNU:正确 (char*)pvoid+=1;//ANSI:错误;GNU:正确
二、typedef
typedef int (*MYFUN)(int, int);
这种用法一般用在给函数定义别名的时候上面的例子定义MYFUN 是一个函数指针, 函数类型是带两个int 参数, 返回一个int
参考:
http://blog.csdn.net/yming0221/article/details/6249151
http://www.cnblogs.com/shenlian/archive/2011/05/21/2053149.html