指標和引用的區別

2021-09-28 19:13:43 字數 1737 閱讀 7762

1.使用引用傳遞提高效率

如果輸入引數以值傳遞的方式傳遞物件,則宜改用「const &」方式來

傳遞,這樣可以省去臨時物件的構造和析構過程,從而提高效率

2.不用混正常值的要和錯誤標誌

正常值使用輸出引數獲得,錯誤碼用返回值獲取。

3. 有些時候函式不需要返回值,為了實現鏈式表達增加靈活性

例如字串拷貝函式 strcpy 的原型:

char *strcpy(char *strdest,const char *strsrc);
strcpy 函式將 strsrc 拷貝至輸出引數 strdest 中,同時函式的返回值又是 strdest。這

樣做並非多此一舉,可以獲得如下靈活性:

char str[20];

int length = strlen( strcpy(str, 「hello world」) );

4. 如果函式的返回值是乙個物件,有些場合用「引用傳遞」替換「值傳

遞」可以提高效率。而有些場合只能用「值傳遞」而不能用「引用傳遞」,否則會出

錯 ----》重點看

5. 函式的出口處要,注意return的型別或者正確性。

(1)return 語句不可返回指向「棧記憶體」的「指標」或者「引用」,因為該內存在函式

體結束時被自動銷毀。例如

char * func(void)

(2)要搞清楚返回的究竟是「值」、「指標」還是「引用」。

(3)如果函式返回值是乙個物件,要考慮 return 語句的效率。例如

return string(s1 + s2);

這是臨時物件的語法,表示「建立乙個臨時物件並返回它」。不要以為它與「先建立

乙個區域性物件 temp 並返回它的結果」是等價的,如

string temp(s1 + s2); return temp;

實質不然,上述**將發生三件事。首先,temp 物件被建立,同時完成初始化;然

後拷貝建構函式把 temp 拷貝到儲存返回值的外部儲存單元中;最後,temp 在函式結束

時被銷毀(呼叫析構函式)。然而「建立乙個臨時物件並返回它」的過程是不同的,編譯

器直接把臨時物件建立並初始化在外部儲存單元中,省去了拷貝和析構的化費,提高了

效率。類似地,我們不要將 return int(x + y); // 建立乙個臨時變數並返回它 寫成 int temp = x + y; return temp;

由於內部資料型別如 int,float,double 的變數不存在建構函式與析構函式,雖然該「臨

時變數的語法」不會提高多少效率,但是程式更加簡潔易讀。

6.指標和引用的區別

引用是 c++中的概念,初學者容易把引用和指標混淆一起。一下程式中,n 是 m 的

乙個引用(reference),m 是被引用物(referent)。

int m;

int &n = m;

n 相當於 m 的別名(綽號),對 n 的任何操作就是對 m 的操作。例如有人名叫王小

毛,他的綽號是「三毛」。說「三毛」怎麼怎麼的,其實就是對王小毛說三道四。所以 n

既不是 m 的拷貝,也不是指向 m 的指標,其實 n 就是 m 它自己!

參考 《林銳-高質量程式設計》

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

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

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

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

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

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