一、默认实参
(1)下面哪个声明是错误的?为什么?
(a) int ff (int a, int b=0, int c=0);
(b)char *init(int ht = 24, int wd, char bckgrnd);
解析:(b)是错误的;考察知识点为:一旦函数的某个形参被赋予了默认值,他后面所有的参数都必须有默认值。
(2)下面调用哪个是合法的?为什么?哪个调用虽然是合法的但是显然程序员的初衷不符?为什么?
char *init(int ht, int wd, char bckgrnd = ' ');
(a) init(); (b)init(24,10); (c)init(14,'*');
解析:(a):ht需要提供实参
(b):合法
(c):合法,但是wd会被赋予*号
考察知识点:
知识点1:函数反复调用的过程中重复出现的形参,这样的值被称为默认实参。该参数在使用过程中可以被用户指定,也可以使用默认数值
知识点2:调用含有默认实参的函数时,可以包含该实参,也可以省略该实参。
知识点3:一旦某个形参被赋予了默认值,其后所有形参都必须有默认值。
知识点4:顺序很重要!在设计函数时,将默认值的形参放在后面。
知识点5:在给定的作用域中,一个形参只能被赋予一次默认实参,且局部变量不能作为默认实参。
(3)给make_plural函数