作为函数参数的指针
void Swap(int *a , int *b){
int tmp = *a ;
*a = *b;
*b = temp ;
}
- 在C语言中函数只能传递参数,使用参数指针,可以大大增加我们精确控制传递参数的能力;除此之外,只传递一个指针而不是一个数据的完整副本可以大大地节省内存空间
- 但是需要在函数中解引用按引用调用的参数
作为函数参数指向指针的指针
int ListRemoNext(LIST *list,LISTELMT *element , void **daTa);
{
*daTa = list -> head -> data ;
}
retVal = ListRemoNext(&list , element , (void **)&iptr);
retVal = ListRemoNext(&list , element , (void *)&iptr);
- 函数想改变传递给它的指针,所以就使用二级指针来实现
泛型指针与类型转换
泛型指针
- C语言只允许相同类型的指针之间进行转换
- 使用泛型指针则可以转换为任何类型的指针
void Swap(void *a , void *b)
{
void temp = *a ;
*a = *b ;
*b = temp ;
}
类型转换
- 对于泛型指针来说类型转换很重要,只有告诉泛型指针通过何种类型来访问地址时泛型指针才能正确取到值。因为泛型指针无法告知编译器它的数据类型,也就不知道有多少个字节会被访问、不知道如何解析字节
- 指针类型的转换会破坏计算本身的对齐方式,很多计算机对对齐方式有要求,以便耨写硬件的优化可以使访问内存更有效率
函数指针
- 函数指针是指向可执行代码块或调用可执行代码段信息块的指针
- 函数指针将函数当作普通指针那样存储和管理
- 声明形式:
函数类型 (* 函数名)(数据类型1 变量1,...);
- 实例与使用
int (* match)(void *val);
match = match_int;
retVal = match( &val );