c语言中函数指针的使用

c语言中函数指针的使用,c,function,pointers,C,Function,Pointers,请看下面的代码:- #include <stdio.h> int sum ( int b, int a){ return (a+b); } int main(){ int (* funptr)( int , int ) = sum; int a = ( * funptr )( 4,5); int b = funptr (4,5); printf("%d\n%d",a,b); return 1; } 另一个是 int b = funptr (4,5); 由于

请看下面的代码:-

 #include <stdio.h>
 int sum ( int b, int a){
 return (a+b);
  }
 int main(){
 int (* funptr)( int , int ) = sum;
 int a = ( * funptr )( 4,5);
 int b = funptr (4,5);
 printf("%d\n%d",a,b);
 return 1;
 }
另一个是

int b = funptr (4,5);

由于我编译了这段代码,结果在这两种情况下是相同的。这意味着它们是等效的吗?

由于历史差异,如何获取函数的地址,您可以在任何时候应用函数的地址并取消引用,而不产生任何影响

此外,取消对函数指针的引用也没有任何效果


因此,是的,您的示例是等效的。

对于函数指针:

函数指针
使用非常灵活。。 您可以在使用或不使用
&
运算符的情况下将值放入其中,并通过使用或不使用
*
运算符的指针调用存储的函数

e、 g,


希望这有帮助……

所以这两个调用语句是等价的?是的,它们是等价的。顺便说一句:获取标准:int(*funptr)(int,int)=*sum//或者**总和也相等?它们与前面的示例不相等,但您的两个新示例彼此相等…哦!您和deb_rider评论之间的冲突请查看他回答中的评论。它们是相同的,但就我个人而言,我总是使用
(*funcptr)(…)
表单明确表示我正在取消引用指针。使读者更清楚地了解到它不是一个具有该实际名称的函数。@Dave因此,取消引用函数指针会产生与不取消引用时相同的值?是的。正如我所说,“它们是相同的”int(*funptr)(int,int)=*sum//或者**总和也相等?是的。。。你可以在
sum
之前放入你想要的任意数量的
*
,所有结果都是一样的…我以前见过几次写这些语句,它们的*sum是什么意思,那么sum和*sum和**sum之间的区别是什么?如果像你前面的例子那样,
sum
是一个函数,它被要求区分
sum
*sum
,在这种情况下实际上
*sum
没有意义,编译器在这种情况下只忽略
*
操作符。。
int b = funptr (4,5);
int (* funptr)( int , int ) = sum;   // or int (* funptr)( int , int ) = &sum;
int a = ( * funptr )( 4,5);          // or int a = funptr( 4,5);