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;
}

歡迎指正!

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