请解释这两个记录之间是否有区别,如果有,那是什么?
#include <stdio.h>
int sum(int a, int b){
return a+b;
}
main(){
int (*fun)(int , int) = NULL;
fun = sum;
printf("%d\n\n", fun(12,14));
printf("%d\n\n",(*fun)(12,14));
return 0;
}
请解释这两个记录之间是否有区别,如果有,那是什么?
#include <stdio.h>
int sum(int a, int b){
return a+b;
}
main(){
int (*fun)(int , int) = NULL;
fun = sum;
printf("%d\n\n", fun(12,14));
printf("%d\n\n",(*fun)(12,14));
return 0;
}
差异仅存在于抽象概念层面。没有实际的区别。
获取函数的地址也可以写成
fun = sum;
或fun = ∑
。也没有区别。也许,建议统一,即 或在那里和那里都使用显式运算符
或者不要在那里或那里使用它们
虽然这个建议可能不值得太多关注。
本质上没有区别,但由于其历史原因,这个问题值得特别关注。
第一种情况
(*fun)()
,既然fun
指向了一个函数sum
,那么*fun
无非就是sum
。在第二种情况下,当fun ()
- 这可以通过函数和指向它的指针可以互换的事实来解释!但这是为什么呢?为什么不使用其中一种方法?事实上,甚至在第一个标准发布之前,C 语言就已经在快速发展,并且到那时两个版本都已经被不同的开发团队使用。特别是,第一种方法是由
Unix
在贝尔实验室扩展的开发人员选择的,第二种方法是Unix
在伯克利扩展的。出于兼容性目的,该标准允许两种方法作为等效方法使用。