带你轻松理解CC++函数指针、函数指针数组、指向函数指针数组的指针

    xiaoxiao2022-07-04  109

    函数指针:

    定义:

    普通定义:int (*pfunc)(int,int);首先(*pfunc)的优先级最高,所以它是一个指针,它指向的是什么呢?指向的是返回值为int,参数为int,int的函数。typedef定义:typedef int (*PFUNC_T)(int,int);就这么简单,下面将介绍如何使用typedef定义。 

    例子:

    int add(int a,int b);普通定义的函数指针赋值为:int (*pfunc)(int,int) = add(非标准赋值)或者int (*pfunc)(int,int) = &add(标准赋值);(此处&可有可无,如果没有函数会隐式转换为指针,但是标准的是需要写的,比如在C++下面的非静态成员类指针,格式:[数据类型 (类名::*pfunc)(参数) = &类名::函数名;]。typedef定义的函数指针赋值为:PFUNC_T pfunc_t;//先定义,因为使用了typedef PFUNC_T就相当于一个数据类型了,只不过是自定义的,把它当作int理解就行了pfunc_t= add或者pfunc_t= &add;。 

    调用:

    普通方式第一种调用:pfunc(100,100),这个是非标准的。普通方式第二种调用:(*pfunc)(100,100),这个是标准的(这里将详细介绍一下,推荐写标准赋值和标准调用,下面的将一笔带过)。typedef调用:pfunc_t(100,100)或者(*pfunc_t)(100,100)同上面一样。

    函数指针数组:

    定义:

    普通定义:int (*pfunc_array[3])(int,int);首先[]的优先级最高,先与pfunc_array结合就是pfunc_array[3],这是一个有3个元素的数组,这个数组里面是装的上面东西呢?装的是指向int (*)(int,int)的函数指针。typedef定义:int (*PFUNC_ARRAY_T[3])(int,int); 

    例子:

    int add(int a,int b);int sub(int a,int b);int mult(int a,int b);普通定义函数指针数组赋值:pfunc_array[0] = add或者pfunc_array[0] = &add;pfunc_array[1] = sub或者pfunc_array[1] = ⊂pfunc_array[2] = mult或者pfunc_array[2] = &mult;typedef定义函数指针数组赋值:PFUNC_ARRAY_T pfunc_array_t;//这里需要先定义一下pfunc_array_t[0] = add或者pfunc_array_t[0] = &add;pfunc_array_t[1] = sub或者pfunc_array_t[1] = ⊂pfunc_array_t[2] = mult或者pfunc_array_t[2] = &mult; 

    调用:

    普通调用:pfunc_array[0](100,100)或者(*pfunc_array[0])(100,100);typedef调用:pfunc_array_t[0](100,100)或者(*pfunc_array_t[0])(100,100)

    指向函数指针数组的指针:

    定义:

    普通定义: 第一种方法:int (*(*pfunc_a_p_1)[3])(int,int);这句话是什么意思?我们先来理解一下,首先(*pfunc_a_p_1)的优先级最高,这里就是一个指针,然后指向的是什么呢?接下来再看把(*pfunc_a_p_1)给去掉就是它所指向的内容了,int (*[3])(int,int),这里我们就知道了,(*pfunc_a_p_1)指向的是一个保存着3个元素的数组,数组里面存放的是指向返回值为int,参数为int,int的函数指针。第二种方法:int (**pfunc_a_p_2)(int,int);typedef定义: 第一种方法:typedef int (*(*PFUNC_A_P_1_T)[3])(int,int);

    第二种方法:

    typedef int (**PFUNC_A_P_2_T)(int,int);

     

    例子:

    上面我们定义了一个int (*pfunc_array[3])(int,int);的函数指针数组普通定义指向函数指针数组的指针赋值: 第一种方法:int (*(*pfunc_a_p_1)[3])(int,int) = &pfunc_array;注意这里需要&pfunc_array第二种方法:int (**pfunc_a_p_2)(int,int) = pfunc_array;typedef定义指向函数指针数组的指针赋值: 第一种方法:PFUNC_A_P_1_T pfunc_a_p_1_t = &pfunc_array;第二种方法:PFUNC_A_P_2_T pfunc_a_p_2_t = pfunc_array;

    调用:

    普通定义调用:(*pfunc_a_p_1[0])(100,100);(*pfunc_a_p_2)(100,100);typedef定义调用:(*pfunc_a_p_1_t [0])(100,100);(*pfunc_a_p_2_t )(100,100);

     

    最新回复(0)