C++语言规定,提供默认值时必须按从右至左的顺序提供,即有默认值的形参必须在形参列表的最后。若是有某个形参没有默认值,则它左侧的全部形参都不能有默认值。调用函数时,主调函数的实参与被调函数的形参按从左至右的顺序进行匹配对应。函数
// 为参数a,b,c分别设置了默认值11,22与33 void func(int a=11,int b=22,int c=33){ cout<<"a=" <<a<< ",b="<<b<<",c="<<c<<endl; } int main() { func(); //调用时缺乏了3个实参,将使用定义中的3个参数默认值 func(55); //调用时缺乏了后2个实参,将使用定义中的后2个参数默认值 func(77,99); //调用时缺乏了最后1个实参,将使用定义中的最后1个参数默认值 func(8,88,888); //调用时实参完备,将不使用定义中的任何参数默认值 return 0; }
假设给出以下的函数声明:
void func(int a,int b=2,int c=3);
则下列函数调用中哪些是正确的?请解释缘由。
//正确
func(1,22,333);
//错误由于第一个参数没有默认值
func();
//正确
func(10,20);
//错误的,调用时给出的实参应该是连续排列的
func(5,,9);spa
1. 引用的定义
引用至关于给变量起了一个别名。变量对应于某个内存地址,若是给某个变量起了别名(不须要给它另开辟内存单元),至关于变量和这个引用都对应到同一地址。程序中使用哪一个名字都是容许的。在C++中,
C++中“引用”的定义格式:类型名 &引用名=同类型的某变量名;3d
int main() { int num=100; int &num_r=num; cout<<" &num_r=" <<num_r<< ",numb="<<num<<endl; // &num_r=100,numb=100 num=101; cout<<" &num_r=" <<num_r<< ",numb="<<num<<endl;// &num_r=101,numb=101 num_r=102; cout<<" &num_r=" <<num_r<< ",numb="<<num<<endl;// &num_r=102,numb=102 return 0; }
二、应用数据做为函数参数code
在程序中不只能定义变量的引用,还能够将引用用在函数中。引用既能够做为函数的参数使用,也能够做为函数的返回值使用。对象
int& add(int &a){ a++; return a; } int main(){ int mun=8; int &a=mun; int &m=add(a); cout << "num=" << mun <<endl; //num=9 m++; cout << "num=" << mun <<endl; //num=10 return 0; }
在C++中,函数调用时参数的传递有两种方式:传值和传引用。blog
//传值 a、b值互换 void SwapValue(int a,int b){ int tmp; tmp=a; a=b; b=tmp; cout<<"SwapValue=>a="<<a<<",b="<<b<<endl;//SwapValue=>a=20,b=10 } //传引用 a、b值互换 void SwapRef(int & a,int & b){ int tmp; tmp=a; a=b; b=tmp; cout<<"SwapRef=>a="<<a<<",b="<<b<<endl;//SwapRef=>a=20,b=10 } int main(){ int a=10,b=20; cout<<"a="<<a<<",b="<<b<<endl<<endl;//a=10,b=20 SwapValue(a,b); cout<<"SwapValue() a="<<a<<",b="<<b<<endl<<endl;//SwapValue() a=10,b=20 a=10; b=20; SwapRef(a,b); cout<<"SwapRef() a="<<a<<",b="<<b<<endl<<endl;//SwapRef() a=20,b=10 return 0; }