void => 空类型
void* => 空类型指针,只存储地址的值,丢失类型,无法访问,要访问其值,我们必须对这个指针做出正确的
类型转换,然后再间接引用指针。void* 指针不允许算术运算。
所有其他类型的指针都可以隐式自动转换成void类型指针,反之需要强制类型转换。
下面直接访问(打印)p内部值是可以的,且打印出的地址相同
若要访问p所指向的具体值,可以强制类型转换:
函数指针
函数是有地址的,函数的地址和函数内部变量的地址是不同的值,这与计算机的存储方式有关。
函数指针的定义:把函数声明移过来(形参名可以省掉),把函数名改写成(* 函数指针名)
int compare_int(const void *a, const void *b) {
...
...
}
定义:
int (*fp)(const void *, const void *);
fp = &compare_int;
调用:
方式一: (*fp)(参数1,参数2); //按普通指针解引的方式进行调用,(*fp)等同于compare_int
方式二:fp(参数1,参数2) //用指针直接调用