C语言引用&的个人理解

因为我学艺不精,所以有时候交换值函数时有时候会写成下面这样
int main(int argc, const char * argv[]) {
    // insert code here...
    
    int x = 3;
    int y = 5;
    Swap(&x,&y);
    cout<<x<<endl;
    cout<<y<<endl;
    
    return 0;
}

void Swap(int *a,int *b){
    int *temp;
    temp = a;
    a = b;
    b = temp;
}
很明显,这样的结果肯定是错的,因为a和b只是形参,交换两个地址对主函数的x和y并没有什么作用,甚至连x和y的地址都不会改变。如果一定要用指针作为参数,可以像下面这样,交换a和b指向的值,可是这样和不用指针也没啥区别了。
void Swap(int *a,int *b){
    int temp;
    temp = *a;
    *a = *b;
    *b = temp;
}
而C++里面有个概念叫引用变量,也就是为原变量起一个别名,使用情况像下面这样
int main(int argc, const char * argv[]) {
    // insert code here...
    
    int x = 3;
    int y = 5;
    swap(x, y);
    cout<<x<<endl;
    cout<<y<<endl;
    
    return 0;
}


void swap(int &x,int &y){
    int temp;
    temp = x;
    x = y;
    y = temp;
}

这样就能够成功交换x和y的值。

为什么会有不同的效果呢,按照我个人的理解是,上面的局部变量a和b只是相当于新建一个指向x和y的指针,只是交换a和b指针地址的值并不能改变x和y的地址的指向,所以x和y的值还是没有改变。

而采用引用的话,实际上就是创建一个指针指向主题函数中的x和y,然后在操作的就是这个指针指向的值。这样才能改变主体函数中x和y的值。

以上仅仅是个人的理解,方便自己理解代码,也有可能实际并不是我想的这样,仅供参考!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值