《C和C++代码精粹》——2.4 传引用语义

本节书摘来自异步社区出版社《C和C++代码精粹》一书中的第2章,第2.4节,作者: 【美】Chuck Allison,更多章节内容可以访问云栖社区“异步社区”公众号查看。

2.4 传引用语义

C和C++代码精粹
除非被告知用别的方法,否则C++总是通过值向函数传递参数。这意味着函数是局部地使用了每一个参数的拷贝。这种传递方式的结果是一个函数不可能在所调用的程序中改变对应的实参值。考虑下面的试图交换两个整型变量值的程序段:

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

诸如swap(a,b)这样的调用对于a和b都不会产任何效果。在退出函数后允许改变函数固定实参值的方式叫做“传递引用”。

程序清单2.6 用指针交换函数中实参的值

// swap2.cpp: 一个有用的交换函数  
#include <iostream>  
using namespace std;  

void swap(int*, int*);  

main()  
{  
    int i = 7, j = 8;  

    swap(&i,&j);  
    cout << "i == " << i << ", j == " << j << endl;  
}  

void swap(int* xp, int* yp)  
{  
    int temp = *xp;  
    *xp = *yp;  
    *yp = temp;  
}  

//输出:  
i == 8, j == 7

在C语言中,可以通过传递想要改变其值的参数的指针来仿真传引用语义。可以通过指针,改变在调用程序中的变量值(参见程序清单2.6)。传递引用对于大型对象和在面向对象系统中是很普通的,在面向对象操作中,指向一个对象的指针称为“句柄”。正如第1章中所解释的那样,通过引用,C++也直接支持传递引用。

本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值