[問題] 傳遞函數時 引數前面加星號的意思~

看板C_and_CPP (C/C++)作者 (心思活一點)時間15年前 (2011/04/17 13:47), 編輯推噓4(4024)
留言28則, 4人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) Eclipse for C++ 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 開發 Samsung BADA App 問題(Question): 前陣子在開發 Samsung BADA 作業系統的 APP時 發現他有一個比較少見的用法 { // Sample uses Panel instead of Container, because Container is an // abstract class. Panel* pContainer = new Panel(); pContainer->Construct(); Form* pForm = new Form(); pForm->Construct(FORM_STYLE_TITLE | FORM_STYLE_INDICATOR); pForm->AddControl(*pContainer); //... pForm->Draw(); pForm->Show(); //... } 而 AddControl的宣告定義是這樣: irtual result Osp::Ui::Container::AddControl ( const Control & control ) 我想請問的是,傳遞參數時 為什麼不這樣寫就好: pForm->AddControl(pContainer); 而是指標 pContainer 前面再加個 * 傳遞引數給參數時 前面加星號 這在程式語言上 有合涵意? 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.57.123.225 ※ 編輯: NetsFan 來自: 61.57.123.225 (04/17 13:48)

04/17 13:50, , 1F
你有學過指標嗎?
04/17 13:50, 1F

04/17 13:52, , 2F
有 但是 這種用法我比較不常用
04/17 13:52, 2F

04/17 13:52, , 3F
可以多指示一下嗎?
04/17 13:52, 3F

04/17 13:52, , 4F
這樣是代表 指標的指標嗎?
04/17 13:52, 4F

04/17 13:54, , 5F
指標變數前加上*是取值
04/17 13:54, 5F

04/17 13:55, , 6F
SOGA~所以就是取 pContainer的位置 擺進去囉!
04/17 13:55, 6F

04/17 13:56, , 7F
應該說pContainer指向一個記憶體位置 *取出那個位置的值
04/17 13:56, 7F

04/17 13:58, , 8F
那麼 AddControl的定義 const Control & control
04/17 13:58, 8F

04/17 13:59, , 9F
這個 & control 是 call by reference 還是 address
04/17 13:59, 9F

04/17 13:59, , 10F
的意思~
04/17 13:59, 10F

04/17 14:00, , 11F
這寫法應該是call by reference C++我就比較不熟了
04/17 14:00, 11F

04/17 14:00, , 12F
原來這種用法是 見接取值運算子 SOGA~ 3q
04/17 14:00, 12F

04/17 14:01, , 13F
* <== 間接取值運算子
04/17 14:01, 13F

04/17 14:02, , 14F
其實我也忘了那叫啥 剛剛去google看到的
04/17 14:02, 14F

04/17 14:04, , 15F
哈 厲害喔
04/17 14:04, 15F

04/17 14:06, , 16F
大概懂了 謝嚕
04/17 14:06, 16F

04/17 14:08, , 17F
所以 *pContainer 就是取 pContainer指的address之對應值
04/17 14:08, 17F

04/17 14:08, , 18F
在這邊 可能就是一個 Control 吧~
04/17 14:08, 18F

04/17 14:39, , 19F
你可以看一下doc http://ppt.cc/DmmX , 我是沒用過,
04/17 14:39, 19F

04/17 14:40, , 20F
但直接 by ref to const 傳遞通常代表 Container 維護
04/17 14:40, 20F

04/17 14:42, , 21F
的是一份複製品, 之後你對外面 Panel 物件做的改變不
04/17 14:42, 21F

04/17 14:43, , 22F
會影響顯示的內容. 另外也有採用傳指標的框架, 不過通
04/17 14:43, 22F

04/17 14:44, , 23F
常是用來建立關聯性, 不是負責管理記憶體
04/17 14:44, 23F

04/17 14:51, , 24F
那~為什麼我記得 call by reference.. 會改到外面的內容?
04/17 14:51, 24F

04/17 14:51, , 25F
還是加上CONST 就沒差了呢
04/17 14:51, 25F

04/17 15:20, , 26F
ref to const, 你能存取這個物件的介面少很多, 通常這
04/17 15:20, 26F

04/17 15:21, , 27F
些介面「不會」改到原物件的狀態
04/17 15:21, 27F

04/17 21:59, , 28F
..........................
04/17 21:59, 28F
文章代碼(AID): #1Dgdy3uB (C_and_CPP)
文章代碼(AID): #1Dgdy3uB (C_and_CPP)