C/C++引用与指针

一、变量声明的区别:

(1)指针声明可以不赋初值,如int*p,引用的声明必须初始化,如int i; int&j = i;引用初始化后不可以再赋值,因为引用实际上是一个变量的别名,从初始化后,是不允许改变的。引用为只读属性,不可修改值。

int i;
int *p; //ok
p = &i; //ok
p = NULL;//ok

int i;
int &n;     //error
int &n = i;//ok

(2)赋值的不同,指针是可以指向任何地址空间的,包括NULL,但是引用是不允许赋空的。

(3)函数的形参的不同。指针类型的参数,一般在函数体内要检测指针是否为空,引用不需要,从这方面说引用的效率比指针的高。

(4)函数的返回值。返回引用时,函数返回时不会再进行复制变量。引用不能返回函数内定义的临时变量,否则会出现意想不到的情况。

(5)函数返回类的引用时,不会调用类的拷贝函数。

#include <iostream>
using namespace std;

class CExample
{
public:
	CExample()
	{
		cout<<"CExample()"<<endl;
	}
	CExample(const CExample& c)
	{
		cout<<"CExample(const CExample& c)"<<endl;
	}
};

CExample& fun(CExample c) //去掉引用,在返回时,要调用一次拷贝构造函数
{
	CExample cc;

	return cc;
}

int main()
{
	CExample c;
	fun(c);
	return 0;
}






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值