指針和引用的差別

指針和引用的區別:主要有以下四個方面

(1)非空區別:在任何情況下,都不能使用指向空值的引用。一個引用必須總是指向某些對象。因此如果你使用一   個變量並讓它指向一個對象,但是該變量在某些時候也可能不指向任何對象,這時就應該把變量聲明爲指針,因爲這樣纔可以賦空值給該變量。相反,如果變量肯定指向一個對象,即加入不允許變量爲空,此時就可以把變量聲明爲引用。不存在指向空值的引用,這意味使用引用的代碼效率比使用指針的效率高。

(2)合法性區別:在使用引用之前不需要測試它的合法性。相反,指針則應該總是被測試,防止其爲空。

(3)可修改性:指針和引用的另一個重要區別是指針可以被重新賦值以指向另一個不同的對象。但是引用則總是指向在初始化時被指定的對象,以後不能改變,但是指定的對象其內容可以改變。

(4)應用區別:總的來說,在以下情況下應該使用指針:一是考慮到存在不指向任何對象的可能(即能夠設置指針爲空),二是需要能夠在不同時刻指向不同的對象(即能改變指針的指向)。如果總是指向一個對象並且一旦指向一個對象後就不會改變指向,此時應該使用引用。

舉例代碼如下:

<span style="font-size:18px;">#include <iostream>
using namespace std;

int main()
{
	int v1;//正常聲明瞭一個整型變量
	int v2 = 1024;//正常聲明一個整型變量並初始化
	int &v3;//錯誤,聲明一個引用,但沒有初始化,因爲引用不能爲空
	int &v4 = v1;//聲明一個引用,同時初始化,即v4是v1的別名
	int *p1;//聲明瞭一個整型指針,但沒有定義這個指針所指向的地址
	*p1 = 5;//錯誤,整數指針p1沒有指向實際的地址,這種情況下賦值是錯誤的,因爲賦的值不知道存放在哪裏,故錯誤
	p1 = &v2;//正確,整數指針p1指向v2的實際地址
	const double d1;//錯誤,const常量賦值時,必須同時初始化
	const double d2 = 10.5;//正確,const常量賦值並同時初始化
	const double *p = &d2;//正確,const常量指針賦值並同時初始化

	cout<<p1<<endl;

	return 0;
}</span>




發佈了36 篇原創文章 · 獲贊 15 · 訪問量 22萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章