A为什么没有错误?有人知道吗?解释一下这四个选项

#include <stdio.h>int add(int a,int b){ return (a+b);}main(){ int k,(*f)(),a=5,b=10; f=add; …}则以下函数调用语句错误的是()。

  • A

    k=f(a,b);

  • B

    k=add(a,b);

  • C

    k=(*f)(a,b);

  • D

    k=*f(a,b);

你可以去查一下指针函数与函数指针的用法和区别。错误的是D。

函数指针,有错的应该选D吧,其它几项没问题。
题目里函数指针的定义应该是:(*f)(int , int)

使用函数的时候 如果是函数名的调用,编译器会自动转化成函数指针去执行函数
对A和B是直接调用函数名(会转为函数指针),对C是直接调用函数函数指针,而D是优先级的错误,k是一个整型不能接受指针值