指针函数和函数指针的区别
一,
在学习arm的过程中,我发现这个“指针函数”和“函数指针”很容易出错,所以今天我想自己把它弄清楚一次,就找了资料。 首先,它们之间的定义:
1、指针函数是指带有指针的函数。 也就是说,本质是函数。 函数的返回类型是指针的类型
类型标识符*函数名称(参数表) int ) f ) x,y ); 首先是函数,但是这个函数的返回值是地址值。 函数的返回值必须由同一类型的指针变量接受。 也就是说,指针函数必须具有函数的返回值,并且在度量函数中,函数的返回值必须分配给相同类型的指针变量。
显示:
浮动* Fun (;
浮动* p;
p=fun(a;
请注意指针函数和函数指针表示方式的差异。 请不要混淆。 最简单的区分方法是,查看函数名称前面的指针*编号是否括在括号()中。 如果包含,则为函数指针,反之为指针函数。
详细地说吧! 请看以下内容
指针函数:
当函数声明返回值为指针时,它将在调用函数中返回地址,以便在实际需要指针或地址的表达式中使用。
格式:
类型说明符*函数名称(参数) )
当然,因为返回地址,所以类型说明符通常是int。
例如,int *GetDate (;
int*AAA(int,int );
函数常用于返回地址值和返回数组的元素地址。
int*getdate(intwk,int dy ); main () { int wk,dy; o { printf (输入week (1-5) day )1-7)n; 扫描(% d % d,wk,dy ); }while(wk1|||wk5||dy1|||dy7 ); printf(%d(n,*getdate ) wk,dy ); }int*getdate(intwk,int dy ) staticintcalendar(5) (7)={ 1,2,3,4,5,6,7 },{ 8,9,10,11,12,rettd }程序应该很好理解。 子函数返回数组中某个元素的地址。 输出的是这个地址的值。 2、函数指针是指向函数的指针变量,即本质上是指针变量。
int(f ) ) int x; /声明函数指针*
f=func; /*指针f */
指向函数的指针包含函数的地址,可以调用该函数。 声明的格式如下:
类型说明符(*函数名称()参数() ) ) ) ) ) ) ) )。
其实这里不能叫函数名,应该叫指针的变量名。 此特殊指针指向返回整数值的函数。 指针的声明钢笔和对函数的声明是一致的。
指针名称和指针运算符外部的括号会更改默认运算符的优先级。 如果没有圆括号,它将是返回整数指针的函数的原型声明。
例如:
void(*FPTR ) );
有两种形式可以将函数的地址分配给函数指针:
fptr=Function;
fptr=Function;
地址运算符不是必需的。 因为只有一个函数标识符表示地址,并且对于函数调用,必须包含用括号括起来的参数表。
有两种从指针调用函数的方法:
x=(*fptr ();
x=fptr (;
第二种格式看起来和函数调用一样。 但是,一些程序员倾向于使用第一种格式,因为他们清楚地表明要用指针而不是函数名称来调用函数。 举个例子吧。
语音(*功能) ); 语音文件功能(,EditFunc ); main () { funcp=FileFunc; (*funcp ) ); funcp=EditFunc; (*funcp ) ); } Void文件func () printf )文件func (n; } void EditFunc () printf ) Editfunc(n ); }文件函数编辑函数的主要区别在于程序输出是指针变量,而另一个是函数。 使用时必须弄清楚才能正确使用