欢迎光临散文网 会员登陆 & 注册

如何理解typedef函数指针?

2023-07-04 21:44 作者:零壹ZLZ  | 我要投稿

1、什么是函数指针

        函数指针函数指针变量的简称,其实质是一个变量,就像   int a;  中的a一样,指针即地址,所以函数指针可以理解为“存放函数入口地址的变量”。举个栗子:

int sum(int a, int b)

{

   return (a+b);

}

void main()

{

        int (*p)(int, int);     //定义了一个函数指针P

        int a = 0;

        p = sum;

        a = (*p)(10,20);

        printf(”%d\\n”,a);

}

        代码中,语句int (*p)(int, int);定义了一个函数指针变量p,它指向的函数返回值类型为int,函数的参数为两个int型。换句话说,变量p可以存返回值为int,形参为两个int型的函数的地址,上例中就是把函数sum的地址(即函数名)赋给了p;

2、函数指针的数据类型

        我们知道C语言中的变量都有其对应的数据类型,比如:int a = 0;   char b;其中变量a的数据类型为int,变量b的数据类型为char,那么int (*p)(int, int);中变量p的数据类型是什么?这里p 的数据类型就是int (*)(int, int) ,是的,就是把p去掉,剩下的就是数据类型。

        现在再来理解typedef函数指针。

  比如,typedef int (*abc)(int, int); 这里是定义数据类型int (*)(int, int) 为别名abc,即可以用abc表示数据类型int (*)(int, int)了。如何使用?再举个栗子:

typedef int (*alias)(int, int);

int sum(int a, int b)

{

  return (a+ b);

}

void main()

{

        alias p = sum;

        int a = 0;

        a = (*p)(10,20);

        printf(”%d\\n”,a);

}

代码第一行重新定义了函数指针数据类型int (*)(int, int)alias ,然后在main函数中用该类型别名alias 定义了函数指针p,运行结果和上个例子中一样。

举一反一,typedef数组指针也类似。


如何理解typedef函数指针?的评论 (共 条)

分享到微博请遵守国家法律