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

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

第一种:传值[/size]

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

[size=medium]程序结果:[/size]

[img]http://dl.iteye.com/upload/attachment/0076/4327/2111b32a-29e4-37d7-abc3-4bce0f884fc8.jpg[/img]

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

第二种:传地址[/size]

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

[size=medium]结果:

[img]http://dl.iteye.com/upload/attachment/0076/4333/54613620-a461-3eb0-a645-1a38e4ddb473.jpg[/img]


第三种:传引用[/size]

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



[size=medium]程序结果:

[img]http://dl.iteye.com/upload/attachment/0076/4329/e82c8a33-f161-3a32-9e63-ef03070f3c06.jpg[/img]
与按值传递相比,按引用传递的唯一区别就是在swap函数的形参由(int a, int b)变成了(int &a, int &b)
这里的&是引用运算符,而不是取地址运算符。
与按值传递有本质区别。[/size]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值