C 函数指针(*f)和f之间的区别是什么

C 函数指针(*f)和f之间的区别是什么,c,arrays,function-pointers,C,Arrays,Function Pointers,我有一个int数组,需要分配一个函数指针 f(tab[i]) and (*f)(tab[i]) 这两种语法之间的区别是什么?您的代码看起来好像是通过函数指针调用函数,并试图将数组的一个元素传递给该函数。指针可以定义为: void (*f)(int); // Function pointer — guessed argument and return types 调用(*f)(tab[i])和f(tab[i])之间的区别在于拼写和历史-结果是相同的 在C90标准之前,(*f)(表[i]

我有一个int数组,需要分配一个函数指针

f(tab[i]) and (*f)(tab[i])

这两种语法之间的区别是什么?

您的代码看起来好像是通过函数指针调用函数,并试图将数组的一个元素传递给该函数。指针可以定义为:

void (*f)(int);     // Function pointer — guessed argument and return types
调用
(*f)(tab[i])
f(tab[i])
之间的区别在于拼写和历史-结果是相同的


在C90标准之前,
(*f)(表[i])
符号是强制性的;C90允许使用
f(表[i])
符号。
(*f)(制表符[i])
的优点是,您不会意外地阻止查找函数
f
——您可以立即看到它是函数指针。(当然,假设你没有一个同事喜欢写
(*sqrt)(*sin)(x)*(*cos)(x))
或其他类似的有效但不合理的晦涩谬论。)

如果
选项卡
是一个整数数组,那么下面的语句

(*f)(tab[i])
正在使用函数指针调用函数,其中
f
是一个函数指针,它可以指向一个将参数作为
选项卡[i]
的函数。例如,在下面的代码块中

void print_arr(int arr_ele_value) {
        printf("%d\t",arr_ele_value);
}
int main(void) {
        int arr[] = {1,2,3,4,5},ele;
        ele = sizeof(arr)/sizeof(arr[0]);
        void (*f)(int); /* function pointer declaration */
        f = print_arr; /* fun-ptr initialization */
        for(int row = 0; row < ele; row++) {
                (*f)(arr[row]); /* calling a function through function pointer */
        }
        return 0;
}
is函数指针声明表示,
f
是一个函数指针,它可以指向一个函数,该函数的输入参数为
int
,并返回
void

这里呢

f = function;
f
分配了满足上述函数指针声明条件的
函数

这就是如何使用函数指针调用函数

(*f)(arr[row]);

现在的编译器没有什么不同;人类只有一个区别。

区别在于去参考*,这一点很清楚。好像我们在为你做功课……我今天刚刚发现了解引用,你能给我一些更多的信息吗,或者你能给我一个很好的解释吗?你能发布一个说明你尝试过什么的帖子吗?拼写-在C90标准之前,
(*f)(tab[I])
符号是强制性的;C90允许使用
f(表[i])
符号。
(*f)(制表符[i])
的优点是,您不会意外地阻止查找函数
f
——您可以立即看到它是函数指针。(当然,假设你没有一个同事喜欢写
(*sqrt)(*sin)(x)*(*cos)(x))
或其他类似的荒谬。
(*f)(arr[row]);