c语言函数指针和指针函数
在学习c语言的过程中,“指针函数”和“函数指针”容易混淆。 最简单的区分方法是查看函数名称前面的指针*星号是否包含在()中。 如果包含则为函数指针,如果不包含则为指针函数。
定义
指针函数:
指针函数是指具有指针的函数。 也就是说,本质是函数,函数的返回类型是某种类型的指针。
类型标识符*函数名称(参数表)
int*f(x,y );
首先,指针函数是函数。 但是,此函数的返回值是地址,函数的返回值必须由相同类型的指针变量接受。 也就是说,指针函数必须具有函数的返回值,并且度量函数必须将函数的返回值分配给相同类型的指针变量。
示例:
浮动* Fun (;
浮动* p;
p=fun(a;
当函数声明返回值为指针时,它将在调用函数中返回地址,以便在实际需要指针或地址的表达式中使用
格式:
类型说明符*函数名称(参数) )
例如:
int *GetDate (;
int*AAA(int,int );
函数常用于返回地址值和返回数组的元素地址。
int*getdate(intwk,int dy );
主()。
int wk,dy;
do {
printf (输入week (1- t ) day )1-7)n );
扫描(% d % d、wk、dk );
}
while(wk1|||wl5||dy1|||dy7 );
printf(%d(n )、*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 ];
}
的功能是子函数返回数组中某个元素的地址,并输出该地址的值。
函数指针
函数指针是指向该函数的指针变量,本质上是指针变量
int(*f ) ) int x ) /函数指针) /
f=func; 将func函数的起始地址设定为函数f*/
指向函数的指针包含函数地址的条目地址,可以通过该地址调用函数。
声明的格式如下:
类型说明符(*函数名称()参数() ) ) ) ) ) ) ) )。
其实这里不是函数名,应该叫指针的变量名。 此特殊指针指向返回整数值的函数。 指针的声明必须与他对函数的声明一致
指针名称和指针运算符外部的括号是函数的原型声明,该函数更改默认运算符的优先级,如果没有括号,则返回整数指针。
例如:
void(*FPTR ) );
有两种形式可以将函数的地址分配给函数指针:
fptr=Function;
fptr=Function;
地址运算符不是必需的。 因为只有一个函数标识符表示其地址,并且对于函数调用,还必须包括用括号括起来的参数表。
从指针调用函数有两种方法:
x=(*fptr ();
x=fptr (;
第二种格式看起来与函数调用类似,但一些编程猴子倾向于使用第一种格式。 这是因为它清楚地表明要用指针而不是函数名称调用函数。
举个例子
语音(*功能) );
语音文件功能(,EditFunc );
主()。
funcp=FileFunc;
(*Funcp ) );
funcp=EditFunc (;
(*funcp ) );
}
voidfilefunc(}
printf (文件函数(n ) );
}
Void编辑Unc
printf (编辑函数(n ) );
}