1 指標與引用的區別

2021-09-11 08:24:00 字數 892 閱讀 9612

指標:

指標是位址傳遞,但其本質上是值傳遞,通常實參傳給形參時,被調函式的形參作為被調函式的區域性變數處理,即在棧中開闢了記憶體空間以存放由主調函式放進來的實參的值,從而成為了實參的乙個副本。

所以進行指標傳遞時,作為實參的指標本身所存的位址值是不會變的,但指標所指位址中的內容則會根據函式的不同操作而改變。

引用:在引用傳遞過程中,被調函式的形式引數雖然也作為區域性變數在棧中開闢了記憶體空間,但是這時存放的是由主調函式放進來的實參的位址(int &a的形式)。被調函式對形參的任何操作都被處理成間接定址,即通過棧中存放的位址訪問主調函式中的實參。正因為如此,被調函式對形參做的任何操作都影響了主調函式中的實參。

從編譯角度來說它們的區別:

程式在編譯時分別將指標和引用新增到符號表上,符號表上記錄的是變數名及變數所對應位址。指標變數在符號表上對應的位址值為指標變數的位址值,而引用在符號表上對應的位址值為引用物件的位址值。符號表生成後就不會再改,因此指標可以改變其指向的物件(指標變數中的值可以改),而引用物件則不能修改。

指標是乙個實體,而引用僅是個別名;

引用只能在定義時被初始化一次,之後不可變,指標可變;

引用沒有const,指標有const,const的指標不可變;(具體指沒有int& const a這種形式,而const int& a是有的, 前者指引用本身即別名不可以改變,這是當然的,所以不需要這種形式,後者指引用所指的值不可以改變)

引用不能為空,指標可以為空;

「sizeof 引用」得到的是所指向的變數(物件)的大小,而「sizeof 指標」得到的是指標本身的大小;

引用是型別安全的,而指標不是,引用比指標多了自身型別檢查;

1 指標和引用的區別

1 什麼是指標?2 什麼是引用?引用 引用是乙個物件的別名,主要用於函式引數和返回值型別,符號x 表示x型別的引用。1 引用不可以為空,但指標可以為空。引用是物件的別名,引用為空 物件都不存在,怎麼可能有別名!所以定義乙個引用的時候,必須初始化。宣告指標是可以不指向任何物件,因此,使用指標之前必須做...

1 指標和引用的區別

性質上的區別 使用上的區別 引用必須要初始化且不能是null,而指標可以是null。且指標的值可以改變,引用不能改變 更像是const,常量指標的概念 有const指標,但沒有const引用 指標可以有多級 p 引用只有一級 sizeof引用 得到的是所指向的變數 物件 的大小,而 sizeof指標...

Item M1 指標與引用的區別

指標用操作符 和 引用使用操作符 但是它們似乎有相同的功能。指標與引用都是讓你間接引用其他物件。首先,要認識到在任何情況下都不能使用指向空值的引用。乙個引用必須總是指向某些物件。因此如果你使用乙個變數並讓它指向乙個物件,但是該變數在某些時候也可能不指向任何物件,這時你應該把變數宣告為指標,因為這樣你...