JAVA程序员学习C++之引用

先上代码吧:

#include <iostream>
using namespace std;


struct User{
	int age;
};

void test(User u){
	//值传递,u只是一个实参的拷贝对象,对u的操作和实参没有关系
	u.age = 20;
	cout << "test(user) user=" << &u << endl;
}

void testPointer(User *pu){
	//值传递,和Java类似,传递的值是实参地址的拷贝,让pu重新指向新地址对实参没有影响
	cout << "testPointer(user) user=" << pu ;
	User user;
	user.age = 20;
	pu = &user;
	cout << " pu=" << pu;
}

void testRefrence(User &ru){
	//引用传递,ru是传入实参的别名,可以理解为传入的就是实参,对ru的所有操作都会反映到实参
	cout << "testRefrence(user) user=" << &ru;
	User user;
	user.age = 20;
	ru = user;//等于在对象间赋值相当于JAVA中的克隆
}

void main(){
	User user, *p_user;
	user.age = 10;
	cout << "user=" << &user << " ";
	test(user);
	testPointer(&user);
	cout << " user=" << &user << " " << endl;
	testRefrence(user);
	cout << " user=" << &user << " user.age=" << user.age << endl;
}

输入结果:
user=002BFBAC test(user) user=002BFACC
testPointer(user) user=002BFBAC pu=002BFAB8 user=002BFBAC
testRefrence(user) user=002BFBAC user=002BFBAC user.age=20

C++的引用操作符为&,使用方式如下:

int a=0;

int &b = a;
如上所示,b即为a的引用,简单说来就是a的别名,两者在内存中占用同样的位置,不会为b开辟新的内存空间,对b的操作即为对a的操作。关于引用有如下三个规则:

(1)引用被创建的同时必须被初始化(指针则可以在任何时候被初始化)。 
(2)不能有NULL 引用,引用必须与合法的存储单元关联(指针则可以是NULL)。 
(3)一旦引用被初始化,就不能改变引用的关系(指针则可以随时改变所指的对象)。


那什么时候用引用,什么时候用指针呢?

指针与引用看上去完全不同(指针用操作符’*’和’->’,引用使用操作符’.’),但是它们似乎有相同的功能。指针与引用都是让你间接引用其他对象。你如何决定在什么时候使用指针,在什么时候使用引用呢? 
首先,要认识到在任何情况下都不能用指向空值的引用。一个引用必须总是指向某些对象。因此如果你使用一个变量并让它指向一个对象,但是该变量在某些时候也可能不指向任何对象,这时你应该把变量声明为指针,因为这样你可以赋空值给该变量。相反,如果变量肯定指向一个对象,例如你的设计不允许变量为空,这时你就可以把变量声明为引用。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值