C语言函数调用问题分析

希望有人回答一下这两个题,说一下选项错误的原因:

1.已知函数原型 int f(int)和 int g(int)。下列语句中,正确调用函数的语句是
A. int f(3);
B. f( int g(3) );
C. int g( f(3) );
D. p=f( g(3) +1 );

2..若程序中有如下函数定义:
void fun(int p[10], int n)
{
int j;
for(j=0; j<n; j++)
p[j]=0;
}且主函数中有声明:int a, b[10];,则主函数中对 fun 函数的调用正确的是( )
A.a=f(b,1);
B.f(b[10],1);
C.f(a,1);
D.f(&a,1)

选D B ?

应该选D、D
第一题int f(3)f( int g(3) )int g( f(3) )都是错误的写法,对应正确的写法是(int) f(3)f( (int) g(3) )(int) g( f(3) )

第二题只能选D,因为f函数需要第一个参数实际为整型指针类型参数,且没有返回值,所以a=f(b,1)是没有返回值错误赋值给整型,会报类型错,f(b[10],1)这里实参b[10]是一个整型,而不是整型指针,也会报类型错误,f(a,1)也是这样,a是整型用作实参,而不是整型指针,这里只有f(&a,1)是一个整型指针为第一个实参,第二个实参为整型。