C++基础之函数

1、函数参数的默认值

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;
}

 2、函数的调用

假设给出以下的函数声明:
void func(int a,int b=2,int c=3);
则下列函数调用中哪些是正确的?请解释缘由。
//正确
func(1,22,333);
//错误由于第一个参数没有默认值
func();
//正确
func(10,20);
//错误的,调用时给出的实参应该是连续排列的
func(5,,9);spa

3、引用和函数参数的传递

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;
}
相关文章
相关标签/搜索