
不明白你的意思……是不是类似于这样 int hello(char a,int i = 4,int m = 9){} ?
这样在c语言中是不可以的,这是c++的概念,默认参数,使用方法如下:以上面的hello函数为例
hello(n); 默认i=4,m=9。 hello(n,5,23); 这里在函数中i = 5,m = 23
就是说,如果调用时给参数赋值了,就使用赋值的,如果没有,就使用默认的
需要标明一点,这种函数参数表有个规则,就是所有的默认参数都靠后,即:int hello(int a = 1,int b,int c=23){} 是错误的……而且,使用时,也不可以跳过一个默认值给后面的值赋值,如:
int hello(char a,int b= 12,char c = 'd')如果想参数b使用默认而给c赋值,那么必须是hello(a,12,c),如果跳过赋值b,即:hello(a,c);就是错的,很好理解,这样就把c赋值给参数b了,一定报错。
1、给形参设置默认的初始值,有初始值的参数要靠后,避免被冲掉
2、和解构赋值结合
思考:
函数参数为undefined时,触发参数默认值
function testFn(a=1,b=2,c=3){
consolelog(a,b,c,a+b+c)
}
testFn(2,'',4) //2 "" 4 "24"
testFn(2,null,4) //2 null 4 6
testFn(2,undefined,4) //2 2 4 8
是C++?
是的话 运行这个自己看看就知道了
#include "iostreamh"
void func(int a, int b=2,int c=3,int d=4)
{
int r=b+c+d; //结果
cout<<r<<"\n";
cout<<a<<" "<<b<<" "<<c<<" "<<d<<"\n";//分别输出
}
void main()
{
func(10,15,20,30); //结果应该是65 10 15 20 30
func(12,12); //结果应该是19 12 12 3 4
func(2,15,20); //结果应该是39 2 15 20 4
}
所以 在定义的时候 形参的默认值是从右到左匹配
但是在实参和形参匹配的时候是从左到右
你也可以把这代码改成用函数声明的
简单来讲,第一个实参使用默认参数后,他后面的所有参数也必须使用默认的参数,否则就是错的。
func(2,15, ,20);
第三参数使用了默认值,那么第四个参数也一定要使用默认值,即func(2,15);是对的
有默认参数的时候,如果实参没有传参数进来,就会使用默认参数如函数void fun(int i,int j=2)j有默认参数2可以这样调用:fun(1)这时候其实i=1,j=2没有传j的值就会使用默认值,即2也可以这样调用:fun(1,3)这时候i=1,j=3, 有传j的值就使用传进来的值如果在有必要的情况下,使用默认参数更方便就是指参数有需要默认值的时候就使用默认参数
答案:后面
解释:编译器是按顺序来传参数的。详解如下:
1 例如void fun(int a, int b, int c=0);那么编译器就按照a,b,c的顺序给函数fun传参数,fun函数里c是默认参数,就是说,调用fun函数时,可以不必传3个参数,可以写成fun(1,2),这样的话,a=1,b=2,c=0
2 如果默认参数不是在后面部分,而是在前面的话,编译器就会报错,譬如:void f(int a, int b=0, int c);这样的话,默认参数是没有任何意义的,因为你写f(1,2)的时候,编译器是把1赋值给a,2赋值给b,结果c没有赋值,故出错。
总结:为了避免出现上述的第2种情况,编译器只要检查到默认参数后面,还有非默认参数,就会报错。所以说,一个函数如果有默认参数,那么默认参数一定都放在参数列表中的后面部分,否则,编译器报错。
指定形参默认值是C++的语法,标准C是不支持这种语法的。
使用c++语法,通常可以保存文件时使用CPP后缀保存。
另外,形参的默认值是在声明函数原型的时候指定,不是在函数定义的时候指定。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)