作者VictorTom (鬼翼&娃娃魚)
看板C_and_CPP
標題Re: [問題] 有關引數讀取問題
時間Tue Apr 19 01:53:31 2011
※ 引述《Muderlay (嘻嘻)》之銘言:
直接舉個例子來看吧, 請捲到推文區:)
: 開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
: VC++
:
: 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
: 無
:
: 問題(Question):
: 我想請問 一開始宣告函式的時候如果定義的引數是一個雙重指標
:
: 而實際上呼叫該函釋的時候卻是寫入一個參考 哪兩者之間的關係為何?
:
: EX:
:
: 宣告 void prepare_enc_frame_picture(Store **stored_pic);
: 呼叫 prepare_enc_frame_picture(&enc_frame[0]);
:
: //Store為自己定義的資料結構,enc_frame也是(Store **enc_frame;)
:
:
: 那這樣子的話 stored_pic跟enc_frame[0]之間有什麼關係?
:
: 我可以直接說這兩個就是一樣的東西嗎??
:
:
: 不知道這樣問大家清楚我的問題是什麼嗎 希望我表達得夠清楚
:
: --
: ※ 發信站: 批踢踢實業坊(ptt.cc)
: ◆ From: 140.113.208.69
: → TsinTa:寫入的應該不是參考,是enc_frame[0]所在的位址 04/19 00:52
: → Muderlay:那stored_pic跟enc_frame是一樣的變數嗎?? 04/19 00:53
: → TsinTa:我覺得是一樣的 04/19 01:01
: → TsinTa:其實你把&enc_frame[0]改成enc_frame應該也會對 04/19 01:02
: → Muderlay:非常感謝樓上的幫忙^^ 04/19 01:02
: 推 VictorTom:&在你舉的例子是取址的意思, 與C++的參考不是同個東西:) 04/19 01:11
: → VictorTom:另外, stored_pic和enc_frame應該不會是一樣的變數, 而 04/19 01:12
: → VictorTom:是stored_pic這個指標變數裡記錄的值(指向的位址)為 04/19 01:13
: → VictorTom:&enc_frame[0]的結果(值), 中譯像是enc_frame[0]的位址 04/19 01:15
: → VictorTom:你可以比比看 &enc_frame 和 &store_pic 結果應該是不一 04/19 01:16
: → VictorTom:樣的:) 04/19 01:16
: → Muderlay:所以**stored_pic是指向enc_frame[0]的address囉? 04/19 01:29
Memory:
|--------|--------|--------|--------|....
^ ~~~~~~ [1] [2] ....
| enc_frame[0]儲存的內容.
|
+--> enc_frame[0]所在的位址 => &enc_frame[0]: 假設為0x00100000
PS. 如果你的enc_frame[0]是直接像 Store enc_frame[10]; 這樣子宣告的,
那麼此時, &enc_frame[0] 會恰好為 &enc_frame;
如果你的enc_frame[]是malloc/new來的, 則上一行的關係不成立.
當你執行了 prepare_enc_frame_picture(&enc_frame[0]); 這行以後....
其實是把 0x00100000 這個值 push 進系統stack裡....
而以 void prepare_enc_frame_picture(Store **stored_pic){...}的觀點來看....
是讓stored_pic這個變數裡存入0x00100000這個值, 而變數就需要記憶體....
所以在拉個簡圖來看, 像是下面這樣....
Memory:
|--------|--------|....
^ ~~~~~~
| 這塊空間裡, 存放了 0x00100000
|
+--> stored_pic所在的位址, 可能是0x00200000
所以小弟我說enc_frame與stored_pic應該是不一樣的東西....
您的問題我不確定我抓的對不對, 不如整套解釋出來給您參考吧:)
至於幾個 **, 純粹是你要讓幾重指標的型態要能匹配對而已@_@"
--
加冒號加的好累, 要怎樣連推文一起引言啊....Orz
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 203.196.147.34
※ 編輯: VictorTom 來自: 203.196.147.34 (04/19 01:56)
推 Muderlay:複製推文(包含ANS碼)XD 04/19 01:57
推 Muderlay:再次感謝 04/19 02:19