C语言函数调用与声明
一、题目引入
设函数fun和实参数组的说明形式为:
void fun(char ch,float x[]);
float a[10];
以下对函数的调用语句中,正确的是哪一个?
A.fun("abc",a[]);
B.t=fun('D',A);
C.fun('65',2.8);
D.fun(32,a);
二、题目分析
通过函数的声明可以看出调用时第一个参数类型是字符型,第二个参数类型是float数组类型
a选项fun("abc",a[]);
第一个传入的参数是字符串类型,而函数声明的时候是字符型,所以类型不匹配
在C语言中,只需要记住,调用函数时传递数组参数,只需要传递数组名即可,a选项中的第二个参数,属于画蛇添足,a本身就代表了数组a的首地址
错因: a[] 这种写法不符合语法规则
b选项t=fun('D',A);
错误原因:
由题目可知,函数fun的返回值是void是空值,这意味着函数fun没有返回值,b选项是想将 fun的返回值赋值给t,而fun函数没有返回值,所以无法复制给t,所以b有问题
c选项fun('65',2.8);
第一个参数是字符型,第二个参数是浮点型,编译器默认是double,只有在数字后面写了f才是float浮点型,否则就默认是double双精度浮点型,故c选项第二个参数错误
d选项fun(32,a);
第一个参数字符型变量本质存储的还是数字(字符ascii编码),所以这里数字传参是没问题的,第二个参数要求传的float数组类型,题目中有定义float a[10];所以d选项正确
三、代码展示
四、运行结果
最后的运行结果会是空格 与ASCII码32是一一对应的关系