函数指针,(* f)和f有什么区别

时间:2018-09-05 17:36:48

标签: c arrays function-pointers

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

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

这两种语法有什么区别?

3 个答案:

答案 0 :(得分:3)

您的代码看起来就像您是通过函数指针调用函数一样,并且您正在寻求将数组的一个元素传递给该函数。指针可以定义为:

void (*f)(int);     // Function pointer — guessed argument and return types

调用(*f)(tab[i])f(tab[i])之间的区别在于拼写和历史记录-结果相同。

在C90标准之前,(*f)(tab[i])符号是强制性的; {90}允许使用f(tab[i])表示法。 (*f)(tab[i])的优点是您不会意外地去寻找函数f -您可以立即看到它是一个函数指针。 (当然,这是假设您没有一个同事喜欢写(*sqrt)((*sin)(x)*(*cos)(x))或其他类似有效但无谓的晦涩荒谬的同事。)

答案 1 :(得分:3)

如果tab是整数数组,则下面的语句

(*f)(tab[i])

正在使用函数指针调用一个函数,其中f函数指针,它可以指向一个以tab[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;
}

void (*f)(int);

函数指针声明,它表示f是一个函数指针,它可以指向一个函数,该函数将输入参数作为int并返回void

还有这里

f = function;

f被分配了function,它满足函数指针声明的上述条件。

这就是使用函数指针调用函数的方式

(*f)(arr[row]);

答案 2 :(得分:2)

如今,编译器没有任何区别。对人类来说只有一个差异。