引用和指標的區別

2021-09-26 21:04:42 字數 1259 閱讀 1280

1,概念:引用不是新定義乙個變數,而是給已存在的變數取了乙個別名,引用和實體共用同一塊記憶體空間

型別&引用變數名(物件名)=引用實體

2,特性: 引用在定義時必須初始化

乙個變數可以有多個引用

引用一旦引用實體,就不能引用其他實體

3,常引用:

void testconstref()
4,應用場景:

作為函式的引數:<1>需要通過形參改變外部實參t&

<2>不需要通過形參改變外部實參

作為函式的返回值:離開函式作用域後,其棧上的空間已經還給系統,注意不能返回函式棧上的空間

只要返回值的生命週期不受函式控制(函式結束後不影響變數的生命週期)

1,全域性變數

2,static型別的變數

3,返回引用型別的變數

5,傳值,傳引用的效率比較

以值作為引數或者返回值型別,在傳參或返回期間,函式不會直接傳遞實參或者將變數本身直接返回,而是傳遞實參

或者返回變數的乙份臨時拷貝,因此用值作為引數或者返回值型別,效率非常低下的,尤其是當引數或者返回值型別

非常大時,效率更低;

通過比較發現:傳值和指標作為函式返回值型別效率相差很大,指標效率較高,傳指標和傳引用的效率基本相當.

引用和指標除了在書寫形式上有區別外

引用在底層實際上就是按照指標的方式進行處理的;(彙編**可以看出)

實際上:引用型別的變數也有空間,空間中實際存放的是引用實體的位址

t&<=>t*const const t&<=>const t* const

1,引用在定義時必須初始化,指標沒有要求;

2,引用在初始化時引用乙個實體後,就不能引用其他實體,而指標可以在任何時候指向任何乙個同型別的實體;

3,沒有空引用,但是有空指標;

4,在sizeof中含義不同:引用結果為引用型別的大小,但指標始終是位址空間所佔位元組個數(32位平台下佔4個位元組);

5,引用自加即引用的實體加1,指標自加即指標的型別向後偏移乙個型別大小;

6,有多級指標但沒有多級引用;

7,訪問實體方式不同,指標需要顯式解引用,引用編譯器自己處理;

8,引用比指標使用起來更加安全.

指標引用和引用指標的區別

c 在傳參的過程中,指標 和指標引用 是有區別的。雖然,我們往往可以通過傳指標然後通過間址訪問來修改指標所指向物件的值,同樣,通過引用也可以直接修改物件的值。但是,當傳指標的時候有乙個問題,就是,我們雖然可以通過指標來修改指標所指向物件的值,但是我們沒有不能直接修改指標的內容 也就是指標變數存放的位...

傳指標和傳指標引用的區別 指標和引用的區別(本質)

指標傳遞引數本質上是值傳遞的方式,它所傳遞的是乙個位址值。值傳遞過程中,被調函式的形式引數作為被調函式的區域性變數處理,即在棧中開闢了記憶體空間以存放由主調函式放進來的實參的值,從而成為了實參的乙個副本。值傳遞的特點是被調函式對形式引數的任何操作都是作為區域性變數進行,不會影響主調函式的實參變數的值...

傳指標和傳指標引用的區別 指標和引用的區別(本質)

指標傳遞引數本質上是值傳遞的方式,它所傳遞的是乙個位址值。值傳遞過程中,被調函式的形式引數作為被調函式的區域性變數處理,即在棧中開闢了記憶體空間以存放由主調函式放進來的實參的值,從而成為了實參的乙個副本。值傳遞的特點是被調函式對形式引數的任何操作都是作為區域性變數進行,不會影響主調函式的實參變數的值...