您当前的位置:首页 >> 休闲 >  >> 
每日视讯:如何理解typedef函数指针?
来源: 哔哩哔哩      时间:2023-07-04 21:57:40

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数组指针也类似。

标签:

X 关闭

X 关闭