函数指针是函数指针变量的简称,其实质是一个变量,就像 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;
我们知道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数组指针也类似。
上一篇:a管理模式电子书(a管理模式)
下一篇:最后一页
(抗击新冠肺炎) 江西住院本土确诊病例清零 南昌全面恢复新冠疫苗接种 中新网南昌5月25日电 (记者 吴鹏泉)随着24日2例住院本土确诊病例治
中新网上海5月25日电 (记者 陈静)在25日举行的上海市新冠肺炎疫情防控工作新闻发布会上,上海市卫生健康委副主任赵丹丹表示,24日,上海
中新网西宁5月25日电 (记者 孙睿)中国科学院西北高原生物研究所专家连新明25日向中新网记者透露,通过近一年来的观测,在青藏高原最大中
中新网南昌5月25日电 (记者 吴鹏泉)江西省红十字会24日消息,湖北一男子在江西南昌因病逝世,家属在悲痛中捐献其器官,挽救了3名重症患者
(抗击新冠肺炎)湖北云梦全县域恢复实施常态化疫情防控措施 中新网孝感5月25日电 据湖北孝感市云梦县新冠肺炎疫情防控指挥部通告,该县全
X 关闭
X 关闭