本質:
引用是別名,指標是位址
具體:
1、從現像上看,指標在運行時可以改變其所指向的值,而引用一旦和某個物件綁定後就不再改變。這句話可以理解為:指標可以被重新賦值以指向另一個不同的物件。但是引用則總是指向在初始化時被指定的對象,以後不能改變,但是指定的對像其內容可以改變。
2、從記憶體分配上看,程式為指標變數分配記憶體區域,而不為參考分配記憶體區域,因為引用宣告時必須初始化,從而指向一個已經存在的物件。引用不能指向空值。
3、從編譯上看,程式在編譯時分別將指標和引用加到符號表上,符號表上記錄的是變數名稱及變數所對應位址。指標變數在符號表上對應的位址值為指標變數的位址值,而引用符號表上對應的位址值為引用物件的位址值。
符號表生成後就不會再改,因此指標可以改變指向的物件(指標變數中的值可以改),而引用物件不能改。這是使用指標不安全而使用引用安全的主要原因。從某種意義上來說引用可以被認為是不能改變的指標。
4、不存在指向空值的引用這個事實,意味著使用引用的程式碼效率比使用指標的要高。因為在使用引用之前不需要測試它的合法性。相反,指針則應該總是被測試,防止其為空。
5、理論上,對於指標的級數沒有限制,但是引用只能是一級。如下:
int** p1; // 合法。指向指针的指针 int*& p2; // 合法。指向指针的引用 int&* p3; // 非法。指向引用的指针是非法的 int&& p4; // 非法。指向引用的引用是非法的
注意!上述讀法是從左到右。
推薦教學:PHP影片教學
以上是php引用和指標的區別的詳細內容。更多資訊請關注PHP中文網其他相關文章!