`
hello_wangfeng
  • 浏览: 31882 次
社区版块
存档分类
最新评论

函数调用时的三种参数传递方式

阅读更多
今天学习《从新手到高手C++全部精华教程》,http://www.iteye.com/topic/1126275
知道了函数调用的三种参数传递方式:

第一种:传值

#include<iostream>
using namespace std;
void swap(int a, int b){  
    int c;
    cout<<"swap交换前"<<"a:"<<a<<endl;  
    cout<<"swap交换前"<<"b:"<<b<<endl;  
    c = a;
    a = b;
    b = c;
    cout<<"swap交换后"<<"a:"<<a<<endl;  
    cout<<"swap交换后"<<"b:"<<b<<endl;  
}
int main(){
    int x = 3;
    int y = 4;
    cout<<"主程序交换前"<<"x:"<<x<<endl;  
    cout<<"主程序交换前"<<"y:"<<y<<endl;  
    swap(x, y);  
    cout<<"主程序交换后"<<"x:"<<x<<endl;  
    cout<<"主程序交换后"<<"y:"<<y<<endl;  
    return 0;
}

程序结果:



按值传递的意思是,将x,y(实参)的值传递给a,b(形参)。在传递开始前,编译器已经对x,y进行了拷贝,形成了x,y的副本,在传值时,将x,y的副本传递给swap函数,x,y的副本在swap函数中进行了交换,但是这只是局部变量,在swap函数调用结束后,x,y的副本并没有改变main函数中的值。

第二种:传地址

#include<iostream>
using namespace std;
void swap(int *a, int *b){  //*a,*b是说形参是指针变量,用于接收实参的地址
    int c;
    cout<<"swap交换前"<<"*a:"<<*a<<endl;  //4
    cout<<"swap交换前"<<"*b:"<<*b<<endl;  //3
    c = *a;
    *a = *b;
    *b = c;
    cout<<"swap交换后"<<"*a:"<<*a<<endl;  //4
    cout<<"swap交换后"<<"*b:"<<*b<<endl;  //3
}
int main(){
    int x = 3;
    int y = 4;
    cout<<"主程序交换前"<<"x:"<<x<<endl;  //3
    cout<<"主程序交换前"<<"y:"<<y<<endl;  //4
    swap(&x, &y);  //按指针传递,即实参是变量的地址,用于给swap函数的指针变量进行操作
    cout<<"主程序交换后"<<"x:"<<x<<endl;  //4
    cout<<"主程序交换后"<<"y:"<<y<<endl;  //3
    return 0;
}

结果:




第三种:传引用

#include<iostream>
using namespace std;
void swap(int &a, int &b){  //&a,&b是说形参是引用变量,用于接收实参
    int c;
    cout<<"swap交换前"<<"a:"<<a<<endl;  //4
    cout<<"swap交换前"<<"b:"<<b<<endl;  //3
    c = a;
    a = b;
    b = c;
    cout<<"swap交换后"<<"a:"<<a<<endl;  //4
    cout<<"swap交换后"<<"b:"<<b<<endl;  //3
}
int main(){
    int x = 3;
    int y = 4;
    cout<<"主程序交换前"<<"x:"<<x<<endl;  //3
    cout<<"主程序交换前"<<"y:"<<y<<endl;  //4
    swap(x, y);  //按引用传递
    cout<<"主程序交换后"<<"x:"<<x<<endl;  //4
    cout<<"主程序交换后"<<"y:"<<y<<endl;  //3
    return 0;
}



程序结果:


与按值传递相比,按引用传递的唯一区别就是在swap函数的形参由(int a, int b)变成了(int &a, int &b)
这里的&是引用运算符,而不是取地址运算符。
与按值传递有本质区别。
  • 大小: 17.1 KB
  • 大小: 18.1 KB
  • 大小: 16.6 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics