c++ 指针和引用的区别(面试)

指针和引用的区别:

这里对于c++中的指针和引用的区别做一个简单的总结!

1. 非空区别

在任何情况下都不能使用指向空值的引用,一个引用必须总是指向某些对象。因此如果你使用某一个变量让它指向对象,但是该变量在有些时候可能不指向任何对象,这个时候你应该把它声明为指针,这样你就可以赋空值给该变量。相反的,如果某个变量指向一个对象且你不允许这个对象为空值,这个时候你就将它声明为引用(也许有点绕…)。不存在指向空值的引用也说明使用引用的代码效率比指针高。

上代码–>在 note1 时:

#include<iostream>
int main()
{
  int a = 1;
  int &ref = a ; //note1
  int *p; //指针可以为空
  //int &ref; //note2
  std::cout<< ref << std::endl;
}

输出:
在这里插入图片描述
note2时候的输出:
在这里插入图片描述
代码2:

#include<iostream>

int main()
{
  int a = 1;
  int b;
  int &ref = a ;
  int *p = &b;
  b = 5;
  std::cout<< ref << std::endl;
  std::cout<< *p << std::endl;
  std::cout<< p << std::endl;
}

输出:
在这里插入图片描述
2. 判断合法性

在使用引用之前不需要测试它的合法性,相反,指针总是应该被测试,防止其为空,因为声明的指针是可以不指向任何对象的,所以要进行判空操作

3. 是否可修改

指针可以被重新赋值指向另一个对象,而作为引用,总是指向初始化时被指定的对象,以后不能改变,但是其指定对象的内容可以改变。

4. 应用区别

总的来说,以下情况应该使用指针:1、考虑到存在不指向任何对象的可能;2、需要在不同的时刻设置不同的对象。如果只是指向一个对象且指向一个对象之后不再改变,那么推荐使用引用。

Example:

#include<iostream>
int main()
{
	int v1;
	int v2 = 1024;
	int v3 = 999;
	int &ref1;	//错误,没有对于引用初始化
	int &ref2 = v1;	//正确,声明引用同时初始化,ref2是v1的别名
	int &ref3 = v1;	//正确,同上
	int *p;
	*p = 5;	//错误,指针p没有指向实际的地址,这种情况下赋值赋的值不知道放到那里去,所以是错误的
	p = &v3;	//正确,p指向v3实际的地址
	const double x1;	//错误,const常量必须初始化
	const double x2 = 10.0;
	const double x3 = 0.5;

	const double *p1 = &x2;
	std::cout << p;
	return 0;
}

欢迎指正!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章