函数形参三种形式及其比较(C++)

以代码为例,自定义swap函数,说明三种形式,对实参的交换结果

  • void swap(int a,int b);
#include <iostream>
using namespace std;
void swap(int p,int q)
{
    int temp;
    temp =p;
    p =q;
    q = temp;
}
int main()
{
    int a=1,b=2;
    swap(a,b);
    cout<<"a="<<a<<" b="<<b<<endl;
    return 0;
}
//输出结果:a=1 b=2
//并没有对实参,产生交换
  • void swap(int * p,int * q);//但是,使用int* temp
#include <iostream>
using namespace std;
void swap(int * p,int * q)
{
    int* temp;
    temp =p;
    p =q;
    q = temp;
}
int main()
{
    int a=1,b=2;
    int *p,*q;
    p =&a;
    q =&b;
    swap(p,q);
    cout<<*p<<*q<<endl;
    return 0;
}
//输出结果:*p=1 *q=2
//并没有对实参,产生交换,因为
//调用函数,不会改变实参指针变量的值(就是不会改变实参指针指向的地址),
//但是可以改变实参指针变量所指向变量的值(指向地址不变,可以改变里面的值)
  • void swap(int * p,int * q);//使用 int temp
#include <iostream>
using namespace std;
void swap(int * p,int * q)
{
    int temp;
    temp = *p;
	*p = *q;
	*q = temp;
}
int main()
{
    int a=1,b=2;
    int *p=&a,*q=&b;
    swap(p,q);
    cout<<"*p="<<*p<<" *q="<<*q<<endl;
    return 0;
}
//输出结果:*p=2 *q=1
//对实参的数值,交换成功
  • void swap(int &p,int &q);
#include <iostream>
using namespace std;
void swap(int &p,int &q)
{
    int temp;
    temp = p;
    p = q;
    q = temp;
}
int main()
{
    int a=1,b=2;
    //int *p=&a,*q=&b;
    swap(a,b);
    cout<<"a="<<a<<" b="<<b<<endl;
    return 0;
}
//输出结果:a=2 b=1
//对实参的数值,交换成功

引用(&),&a,不是“a的地址”,而是指“a是一个整形变量的引用(别名)”由于是形参,所以不必对它进行初始化(未指定它是哪个变量的别名)

传值方式void swap(int a,int b); void swap(int * p,int * q);(实参是地址,传递的也是地址,故仍然是传值方式)

传址方式void swap(int &p,int &q);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值