A-grain-of-wheat

函数指针、数组指针、指针数组、二级指针

函数指针、数组指针、指针数组、二级指针

函数指针

函数名就是个指针
  1. 函数的指针
    '''
    bool func(int num)
    {
    printf("heihei");
    }

int main()
{
bool (func_p)(int num);
func_p = func;
func_p(10);
}
'''
自定义函数指针来指向函数
写出函数声明
为函数名添加小括号
修改函数名,在函数名前面加

此函数指针便指向函数了,便可以通过指针调用函数了。
2. 函数指针可以把函数当作参数在函数之间进行传递,实现函数的回调。

例如函数:void qsort(void* base,size_t nmemb,size_t size,int(* compar)(const void*,const void*)));
  可以把现在实现的代码函数compar指针传给上函数实现排序。

二级指针

简言之即指针的指针。
例如:float f = 3.14;float* p = &f(一级指针);float** pp = &p(一级指针的地址)。
    *p <=> f;
    *pp <=> p;
    **pp <=>*p <=> f;

函数之间需要共享普通变量使用一级指针,需要共享指针变量使用二级指针。

指针数组

数组元素的类型是指针变量。
char* arr[5];<==> char* p1,p2,p3,p4,p5;

即sizeof(arr) =20;存储的是指针类型的。

数组指针

指向数组的指针。
int    arr[10];
int    (*p)[10] = NULL;
p+1 =    40,数组指针加1即加了整个数组。 

数组指针可以用于二维数组。
int arr[][5] = {{1,1,1},{2,3,2},{1,1,1},{2,2,2},{1,1,1}};
传数组需要传行列,但用数组指针只需要传行或列。

注:二维数组其实是用很多一维数组模拟的,
    11111111111111111111111111111  
    1111

posted on 2018-12-16 10:51  A-grain-of-wheat  阅读(159)  评论(0编辑  收藏  举报

导航