很多时候,当我们提到指针函数和函数指针时,很多人都不理解。 用小编详细介绍c语言中函数指针、指针函数、函数指针的区别。
c语言指针函数定义:
函数指针是指向函数的指针变量。 因此,“函数指针”本身必须首先是指针变量。 但是,该指针变量是指函数。 它在这里是指函数,因为指针变量可以指向整数变量、字符类型和数组。 如上所述,c在编译时,每个函数都有一个条目地址。 此条目地址是函数指针指向的地址。 如果存在指向函数的指针变量,则可以使用该指针变量调用函数。 这些概念几乎一致,以便指针变量可以引用其他类型变量。 函数指针有两种用途:函数调用和函数参数。
函数类型(*指针变量名称) )形参数列表);
函数类型说明函数的返回类型。 「()”的优先级高于“*”,因此指针变量名称之外的括号是必不可少的。 后面的“参数列表”表示指针变量指向的函数的参数列表。
例如:
int(f ) ) int x );
双精度(* ptr ) )双精度x;
定义函数指针时请小心。
函数指针及其所指函数的自变量的数量和类型应该为-;
函数指针的类型和函数的返回类型也必须匹配。
函数指针分配:
函数名称和数组名称一样表示函数代码的起始地址,所以分配值时只要直接将函数指针指向函数名称即可。
例如,
intfunc(intx );
int(f ) ) int x );
f=func;
赋值时的函数func没有括号也没有参数。 func表示函数的起始地址,因此赋值后,指针f指向函数func(x )的代码的起始地址。
指针函数和函数指针的区别:
1、指针函数是指带有指针的函数。 也就是说,本质是函数。 函数的返回类型是指针的类型
类型标识符*函数名称(参数表)
int*f(x,y );
首先是函数,但是这个函数的返回值是地址值。 函数的返回值必须由同一类型的指针变量接受。 也就是说,指针函数必须具有函数的返回值,并且在度量函数中,函数的返回值必须分配给相同类型的指针变量。
显示:
浮动* Fun (;
浮动* p;
p=fun(a;
请注意指针函数和函数指针表示方式的差异。 请不要混淆。 最简单的区分方法是,查看函数名称前面的指针*编号是否括在括号()中。 如果包含,则为函数指针,反之为指针函数。
详细地说吧! 请看以下内容
指针函数:
当函数声明返回值为指针时,它将在调用函数中返回地址,以便在实际需要指针或地址的表达式中使用。
格式:
类型说明符*函数名称(参数) )
当然,因为返回地址,所以类型说明符通常是int。
例如,int *GetDate (;
int*AAA(int,int );
函数常用于返回地址值和返回数组的元素地址。
int*getdate(intwk,int dy );
主() )
{
int wk,dy;
德奥
{
printf(enterweek(1-5) day )1-7) n );
扫描(% d % d,wk,dy );
}
while(wk《1||wk》5||dy《1||dy》7;
printf(%dn、*getdate ) wk、dy );
}
int*getdate(intwk,int dy ) )。
{
静态int calendar [5] [7]=
{
{1、2、3、4、5、6、7}、
{8、9、10、11、12、13、14},
{15、16、17、18、19、20、21},
{22、23、24、25、26、27、28},
{ 29,30,31,-1}
(;
返回日历[ wk-1 ] [ dy-1 ];
}
程序应该很好理解。 子函数返回数组中某个元素的地址。 输出的是这个地址的值。
2、函数指针是指向函数的指针变量,即本质上是指针变量。
int(f ) ) int x );
f=func;
指向函数的指针包含函数的地址,可以调用该函数。 声明的格式如下:
类型说明符(*函数名称()参数() ) ) ) ) ) ) ) )。
其实这里不能叫函数名,应该叫指针的变量名。 此特殊指针指向返回整数值的函数。 指针的声明钢笔和对函数的声明是一致的。
指针名称和指针运算符外部的括号会更改默认运算符的优先级。 如果没有圆括号,它将是返回整数指针的函数的原型声明。
例如:
void(*FPTR ) );
有两种形式可以将函数的地址分配给函数指针:
fptr=FuncTIon;
fptr=FuncTIon;
地址运算符不是必需的。 因为只有一个函数标识符表示地址,并且对于函数调用,必须包含用括号括起来的参数表。
有两种从指针调用函数的方法:
x=(*fptr ();
x=fptr (;
第二种格式看起来和函数调用一样。 但是,一些程序员倾向于使用第一种格式,因为他们清楚地表明要用指针而不是函数名称来调用函数。 举个例子吧。
语音(*功能) );
语音文件功能(,EditFunc );
主() )
{
funcp=FileFunc;
(*funcp ) );
funcp=EditFunc;
(*funcp ) );
}
Void文件Unc ()
{
文件函数(printf );
}
Void编辑函数()
{
printf (编辑函数;
}
程序的输出如下。
文件函数
编辑函数
的主要区别之一是指针变量,另一个是函数。 使用时必须弄清楚才能正确使用