函数形参三种形式及其比较(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);

发布了30 篇原创文章 · 获赞 5 · 访问量 2223

猜你喜欢

转载自blog.csdn.net/weixin_44408476/article/details/104536133