有如下一段程序:
int f1(float); int f2(char); int f3(float); int f4(float); int (*pf)(float);
则以下不合法的是()
A. int (*p)(float) = &f1; 这是一个合法的赋值语句,将函数f1的地址赋给了指针变量p。
B. pf = &f4; 这也是一个合法的赋值语句,将函数f4的地址赋给了函数指针pf。
C. pf = &f2; 这里将函数f2的地址赋给函数指针pf,语法上是合法的,但是由于f2的参数类型与指针pf所指向的函数类型不匹配(f2的参数类型是char,而指针pf所指向的函数类型参数类型应该是float),因此这个赋值是不合法的。
D. pf = f3; 这也是一个合法的赋值语句,当函数名被用作右值时,它会自动转换为指向该函数的指针。