C++中的指针与引用

    C++中在函数未被调用时,函数的形参并不占有实际的内存空间,也没有实际的值。只有函数被调用时才为形参分配存储单元,并将实参与形参相结合。每个实参都是一个表达式,其类型必须与形参相符。函数的参数传递指得就是形参与实参结合的过程,形参与实参结合的方式有值传递和引用传递。

    值传递是指当发生函数调用时,给形参分配内存空间,并用实参来初始化形参(直接将实参的值传递给形参)。这一过程是参数值的单向传递过程,一旦形参获得了值便与实参脱离关系,此后无论形参发生了怎样的改变,都不会影响到实参。

    引用传递方式中传递的不是值,而是内存的别名,因此实参与形参实际是同一内存地址上的数据。

    C++中指针为内存地址,而引用是一种特殊类型的变量,可以被认为是另一个变量的别名,通过引用名与通过被引用的变量名访问变量的效果是一样的。

    指针是内存的实际地址,而引用可以看做是内存的别名,通过指针和通过引用的访问效果是一致的,如下面代码中的swap1和swap2的功能是一样的。但是swap3不能实现指定的功能,因为其为值传递,以类的实例为形参时,是为值传递,会调用复制构造函数。

#include<iostream>
using namespace std;
class A
{
      public:
             int a;
};


void swap1(int * a,int * b)
{
 int temp;
 temp=*a;
 *a=*b;
 *b=temp;
}

void swap2(int &a,int &b)
{
 int temp=a;
 a=b;
 b=temp;
}

void swap3(A m,A n)
{
     A temp;
     temp.a=m.a;
     m.a=n.a;
     n.a=temp.a;
}


int main()
{
 int a,b,c,d;
 int* p1,*p2;
 A ca;
 A cb;
 while(true)
 {
        cin>>a>>b;
        ca.a=a;
        cb.a=b;
     c=a;
     d=b;
     p1=&a;
     p2=&b;
     swap1(p1,p2);
     swap2(c,d);
     swap3(ca,cb);
     cout<<a<<" "<<b<<endl;
     cout<<c<<" "<<d<<endl;
     cout<<ca.a<<" "<<cb.a<<endl;
 }
 return 0;
}

程序运行结果:

3 5
5 3
5 3
3 5
             
                    


 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值