我有一个int数组,我需要分配一个函数指针,
f(tab[i]) and (*f)(tab[i])
这两种语法有什么区别?
答案 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)
如今,编译器没有任何区别。对人类来说只有一个差异。