函数指针数组和函数指针数组指针

1. 理解(*(void (*)())0)()----这是什么

 从内到外一层层理解:

 第一步:void (*)() 表示的是一个函数指针类型,函数无参数,无返回值类型;

    第二步:(void (*)())0 表示的是将0强制转换为函数中指针类型;

    第三步:(*(void(*)())0)()表示的是对0函数指针的函数调用;

2.函数指针数组

         -----------简单来说就是“存放函数指针的数组

#include <iostream>

char * func0(char * str)
{
    printf("func0 %s\n", str);
    return NULL;
}

char * func1(char *str)
{
    printf("func1 %s\n", str);
    return NULL;
}

char * func2(char *str)
{
    printf("func2 %s\n", str);
    return NULL;
}

int main()
{
    char *(*pbuf[3])(char*);
    pbuf[0] = func0;
    pbuf[1] = &func1;
    pbuf[2] = &func2;

    *pbuf[0]("wei");
    *pbuf[1]("you");
    *pbuf[2]("qing");

    system("pause");
    return 0;
}

输出结果:

func0 wei

func1 you

func2 qing

在以上的代码中:

第一步:函数的类型为char * ()(char*);函数参数是char *指针类型,返回值类型为char *指针;

第二步:使用此函数类型定义一个函数指针  char * (*ptr) (char*);

第三步:使用此函数类型定义一个函数指针数组  char* (*pbuf[3])(char *);

因此以上代码中定义的一个存放函数指针的数组就是char *(*pbuf[3](char *));  剩下的代码自然也就好理解了!

3.

  

猜你喜欢

转载自www.cnblogs.com/weiyouqing/p/12933342.html