2022年1月8日 星期六

[C++] C++的 * 與 & 用法

雖然是基本的東西,但是最近比較常碰,還當作複習再整理一次。

剛好看到一篇文章內有舉例,就拿來說明一下。

C++程序加速的12個方法這篇裡面提到的以下四種情況






第一種使用方式應該沒有問題,

但先前常常把二和三搞混,不都是指標嗎?  錯了。

說明如下(直接引用網址內的範例):

符號出現位置不同,代表不同的意義。

1.先來說說 "&":

"&" 如果出現在宣告,那就是 reference 用途,或者稱作別名(大陸用語?)

例如上圖 bool Compare(string &s1, string &s2) ,當呼叫Compare(x,y)時,

不論x是什麼型態,指針還是一般值變數,都會是相等的,

可以直接把s1視作x,因為s1就只是代替x進行操作而已,

所以不管是指標還是一般變數,

在function內對s1和s2進行設定,x和y是會被改變的。


"&"如果出現在變數左邊,那就是取址

例如 int *a = &c,&將c的位址取出,然後丟到指標a去儲存,

功能和上面reference用途完全不同


2.再來看"*":

"*"如果出現在宣告,就是代表指標,

例如 int *a = &c,便是宣告一個int指標變數a,用來指向c的位置。


"*"如果出現在變數左邊,那就是取值,

一樣是 int *a = &c 舉例,當指標a指向c之後,想要把c的值取出時,

可以這麼做,宣告一個int變數x,

int x = *a,那麼a就會將剛剛所指向的位址(c的位址)內所儲存的值給取出,

再丟給x。


延伸閱讀:C++  *&用法 , *與&同時使用


參考資料:

C/C++之指標 (pointer),參考 (reference) 觀念整理與常見問題 (轉貼)



沒有留言:

張貼留言

社會新鮮人如何投資?

我的觀點是,在 沒有很多 本錢 的情況下, 別寄望每個月幾千元放到股票或者最近很夯的高股息ETF就能讓你致富, 先投資自己,讓自己的本業收入提高吧。