指针&引用

很多面试题中和acm竞赛以及很多问题中都会遇到指针和引用的差别。

引用在内部存放的是对象的地址,有时候又称为别名。通过引用我们可以间接的操作对象,与指针类似但不需要指针的语法。

引用的主要用途是“为了描述函数的参数和返回值”,特别是运算符的重载。

与指针的区别:引用必须指向一个对象,因此引用声明时必须初始化,始终如一。

而且引用赋值和指针不同。



参数传递方式:

3种,值参数,引用参数,指针参数。

值参数:与传值形式参数对应的实际参数将在函数执行之前被复制给形式参数,函数运行结束时,形式参数所属数据类型的西沟函数负责释放该参数。返回时,形参不会复制到对应的实参。

由于传值调用需要一个对象的复制和释放的过程,这将影响程序的执行效率,特别是传递的对象很大时。更好的解决方案是传递常量引用参数(const &)

指针参数和引用参数其实都是传递对象的地址,而不是整个对象的复制品。他们只是用法不同。

指针参数需要复应用符(*)来指向对象,而引用参数性质类似于指针,用法却类似于值参数。由于指针可能非空,所以我们用之前要进行检查。


顺便提一下const

int const *var 指向常量的非常量指针,指针var可变,指向的值*var不变

int *const var与上面相反

int const *const var略


const左结合一下全解释







话不多说,最后附上一段代码,供大家思考:

#include "iostream"
using namespace std;

void swap(int *a,int *b){

	int *p;
	p=a;
	a=b;
	b=p;

}

void swapref(int &a,int &b){
	int c;
	c=a;
	a=b;
	b=c;
}

int main(){
	int a=3,b=4;
	int &af=a,&bf=b;
	cout<<a<<"  "<<b<<endl;
	int *pa,*pb;
	pa=&a;
	pb=&b;
	swap(&a,&b);
	cout<<a<<"  "<<b<<endl;
	swap(a,b);
	cout<<a<<"  "<<b<<endl;
	swap(&af,&bf);
	cout<<a<<"  "<<b<<endl;
	swap(a,b);
	cout<<a<<"  "<<b<<endl;
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值