請說出C++中引用和指針的區別。(華為、騰訊、阿里等)
參考答案:
(1)當引用被創建時,它必須被初始化。而指針則可以在任何時候被初始化。
(2)一旦一個引用被初始化為指向一個對象,它就不能被改變為對另一個對象的引用。而指針則可以在任何時候指向另一個對象。
(3)不可能有NULL引用。必須確保引用是和一塊合法的存儲單元關聯。
進一步解析:
指針和引用都是 C++ 中的基本語法成份,它們既有聯系,也有不同之處。
它們都是地址的概念,其中指針指向一塊內存,它的內容是所指內存的地址;而引用是某塊內存的別名,具體來說,指針是一個變量的地址,引用是一個變量的別名。
但它們的不同之處也很明顯,體現在以下方面:
-
指針是一個實體,而引用僅是個別名;
-
引用必須被初始化,指針不必;
-
引用只能在定義時被初始化一次,之后不可變;指針可以改變所指的對象;
-
可以有const指針,但是沒有const引用;
-
不存在指向空值的引用,但是存在指向空值的指針,即引用不能為空,指針可以為空;
-
“sizeof 引用”得到的是所指向的變量(對象)的大小,而“sizeof 指針”得到的是指針本身(所指向的變量或對象的地址)的大小;
-
指針和引用的自增(++)運算意義不一樣;
-
程序為指針變量分配內存區域,而引用不需要分配內存區域;
-
指針可以有多級,但是引用只能是一級,例如int **p是合法的,而 int &&a是不合法的;
- 指針和引用作為函數參數進行傳遞時也不同。用指針傳遞參數,可以實現對實參進行改變的目的;在將引用作為函數參數進行傳遞時,實質上傳遞的是實參本身,而不是實參的一個拷貝,因此對形參的修改其實是對實參的修改。