指針(pointer)和參考(reference)的區別
在討論指針和引用之間的區別之前,讓我們先簡單地看一下這兩個術語的含義。在程序中,數據佔用內存。為了訪問數據,應該知道數據在執行時被放在內存中的確切位置。指針變量和引用變量用於訪問這些數據並操作它們所在的內存地址。也就是說,指針和引用都可以用來間接引用對象。它們基本上把內存地址作為它們的值。指針和引用之間的關鍵區別在於指針是存儲另一個變量內存位置地址的變量,而引用是引用另一個變量的變量。指針和引用這兩種機制有不同的語法和用法。
什麼是指針(a pointer)?
指針是一種編程語言對象,它將值的內存地址存儲在計算內存中。
c++語法;
積分i=5;
int*ptr=&i;
第一行定義了一個值為5初始化的變量。第二行定義指向變量內存地址的指針。這裡,“ptr”被聲明為“pointer to int”類型的對象,其初始值是對象i的地址。實際上,ptr變量通過存儲其內存地址指向i。
獲取存儲在內存位置的值稱為取消引用。*運算符用於取消對指針的引用。引用表達式ptr之後的間接引用。
要改變i的值,可以使用以下賦值;
*ptr=20;
指針也可以重新分配以引用不同的對象。
空指針是一種特殊類型的指針。空指針通常用0或null表示,並且指向零。在一個很好的例子中,一個指針被分配給一個不被指定為空的指針。此賦值可用於邏輯操作和條件。
指針可用於存儲和管理動態分配內存的地址。使用指針可以有效地實現和控制數據結構(如堆棧、隊列和列表)。例如,隊列可以有兩個指針:頭指針和尾指針。指針也可以用來按變量的地址傳遞變量,這樣可以更改值。直接操作內存或內存映射設備也可以通過使用指針來處理。
指針允許對尋址內存進行受保護和無保護的訪問。因此,必須採取必要的預防措施來驗證指針的內容是否有效。否則,用無效的內存地址取消引用指針可能會導致程序崩潰。
指針在語言中支持,如C、C++、Pascal和許多彙編語言。
什麼是參考文獻(a reference)?
引用只是存儲在內存中的值的替代標識符。它使程序能夠間接地訪問特定的數據。
c++語法;
積分i=5;
int&ref=i;
第一行定義了一個值為5初始化的變量。第二行將“ref”聲明為引用i的“reference to int”類型的對象。如果引用被實現為存儲在內存中的特定數據的物理地址,則引用不同於數據本身。
一旦定義了引用,就不能重新分配新值。引用總是引用初始化它的對象。在下面的賦值中,ref仍然引用i,但是值現在是20。
參考值=20;
根據上面的例子,取消引用引用不需要任何運算符。
當變量總是引用對象時,可以使用引用。這是因為,與指針不同,引用不能為null,並且必須始終在初始化時賦值。由於引用必須始終引用某個對象,因此將這樣的變量作為引用可以確保程序能夠高效、正確地工作。如果沒有空引用,則不必測試引用變量的有效性。
引用變量可用於有效地將大數據作為參數傳遞給過程。引用還用於在不同代碼區域之間共享大數據,因為每個代碼都保留對數據的引用。
諸如C++、java、python、perl、php、Ruby等編程語言支持引用。
指針(pointer)和參考(reference)的區別
指針和引用的定義
指針:指針是存儲在計算內存中的對象的內存地址。
引用:引用是對象的替代標識符或別名。
指針和引用的特性
宣言
指針:用*運算符聲明指針。
引用:使用&運算符聲明引用。
解引用
指針:指針變量需要取消對*運算符的引用。
引用:引用變量不需要取消引用運算符。
初始化
指針:指針可以初始化為null。這樣的變量稱為空指針。
引用:引用不能初始化為null。沒有空引用。引用必須始終引用對象。
重新分配
指針:可以重新分配指針變量以引用不同的對象。
引用:不能重新分配引用變量。它總是引用初始化它的對象。
使用
指針:當不存在引用任何內容的可能性,或者需要在不同的時間引用不同的對象時,應該使用指針變量。
引用:當總是有一個對象要引用,並且不需要使用引用變量引用對象以外的任何對象時,應該使用引用變量。
用法的應用
指針和指針可以用來實現數據結構。
引用:引用變量可以用在函數參數中,返回類型定義有用的接口。
使用的語言:
指針:編程語言如C、C++、Pascal和許多彙編語言支持指針。
參考:編程語言如C++、java、python、perl、php、Ruby等支持參考。
Image Courtesy: “Pointers” by This file was made by User:SvenTranslation.Own work.This vector image was created with Inkscape.(CC BY-SA 3.0) via Comm*** –