線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1663
推到 Plurk!
推到 Facebook!

typedef 的問題~

答題得分者是:harpist
ldd
一般會員


發表:12
回覆:62
積分:19
註冊:2004-07-06

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-06-08 15:30:27 IP:61.30.xxx.xxx 訂閱
請問一下 下面的宣告是用在哪些地方 有沒有code可以參考?
typedef char ( *FRPTC( ) )[5];
書上寫說 FRPTC會是一個回傳指向五個元素的char 陣列的函數型態指標。
但是有看沒有懂 有沒有高手幫我解惑~以及如何使用類似這樣的宣告?
Thanks.
harpist
資深會員


發表:3
回覆:251
積分:430
註冊:2002-10-03

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-06-09 05:32:56 IP:59.104.xxx.xxx 未訂閱
<textarea class="cpp" rows="10" cols="60" name="code"> //--------------------------------------------------------------------------- typedef char (*FRPTC())[5]; FRPTC* Func() { char *a = "0123456789ABCDE"; return reinterpret_cast(a); } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { FRPTC * pFunc = reinterpret_cast(&Func); ShowMessage(sizeof(pFunc()[0])); //size = 5 ShowMessage(pFunc()[0]); //0123456789ABCDE ShowMessage(pFunc()[1]); //56789ABCDE ShowMessage(pFunc()[2]); //ABCDE } //--------------------------------------------------------------------------- </textarea><br />
這樣您是否有看出端倪
------
~§~迷時師渡,悟了自渡~§~
編輯記錄
harpist 重新編輯於 2007-06-09 05:39:12, 註解 無‧
ldd
一般會員


發表:12
回覆:62
積分:19
註冊:2004-07-06

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-06-10 23:50:48 IP:61.57.xxx.xxx 訂閱
Dear harpist

感謝你的回覆,也感謝你能貼出smaple code給我觀摩~
從你給的範例看起是回傳shift 5的陣列位址
pFunc()[0] return &a[0];
pFunc()[1] return &a[5];
...
但是我是看不太出來這樣宣告出來的原理是如何做到的???
如果可以是否可以進一步的解釋,或者查詢哪些keyword可以找到相關資料
因為我打 typedef and function找出來的東西 都是跟function pointer有關
這類的宣告以及用法比較少點~
再次感謝你的指導
Thanks.




yshihyu
一般會員


發表:23
回覆:18
積分:8
註冊:2006-11-28

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-06-11 03:34:22 IP:203.70.xxx.xxx 訂閱

===================引 用 ldd 文 章===================
請問一下 下面的宣告是用在哪些地方 有沒有code可以參考?
typedef char ( *FRPTC( ) )[5];
書上寫說 FRPTC會是一個回傳指向五個元素的char 陣列的函數型態指標。
但是有看沒有懂 有沒有高手幫我解惑~以及如何使用類似這樣的宣告?
Thanks.


________________________________________________________________________________

這樣應該是不合法的宣告吧 , FRPTC會是一個回傳指向五個元素的char 陣列的函數型態指標
函式不能回傳(return) 陣列 ...

謝謝

編輯記錄
yshihyu 重新編輯於 2007-06-11 03:34:58, 註解 無‧
harpist
資深會員


發表:3
回覆:251
積分:430
註冊:2002-10-03

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-06-11 15:10:03 IP:211.74.xxx.xxx 未訂閱
TO:yshihyu
思考一下函式回傳的是指標還是陣列呢?怎麼變成陣列的?是在何時發生的?
typedef char *Func();
typedef char (*Func)();
兩者有何不同?

TO:ldd
typedef char (*FRPTC())[5];
一個 FRPTC 函式傳回 char 指標指向一個長度為5的陣列。




------
~§~迷時師渡,悟了自渡~§~
yshihyu
一般會員


發表:23
回覆:18
積分:8
註冊:2006-11-28

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-06-11 18:09:18 IP:203.70.xxx.xxx 訂閱

===================引 用 harpist 文 章===================
TO:yshihyu
思考一下函式回傳的是指標還是陣列呢?怎麼變成陣列的?是在何時發生的?
typedef char *Func();
typedef char (*Func)();
兩者有何不同?

TO:ldd
typedef char (*FRPTC())[5];
一個 FRPTC 函式傳回 char 指標指向一個長度為5的陣列。
_____________________________________________________

harpist 你好

我沒仔細看 typedef char (*FRPTC())[5]; 只看ldd的解釋 FRPTC會是一個回傳指向五個元素的char 陣列的函數型態指標 , 這樣解釋好像說成 FRPTC是函式指標 ,回傳五個元素的char 陣列

FRPTC 應該只是函式 , 沒傳入任何參數 ,回傳指向五個元素的char 陣列 char 指標

FRPTC 函式傳回 char 指標指向一個長度為5的陣列 // 這樣解釋 , typedef char (*FRPTC())[5]; 就對了

謝謝









編輯記錄
yshihyu 重新編輯於 2007-06-11 18:10:07, 註解 無‧
yshihyu 重新編輯於 2007-06-11 18:12:13, 註解 無‧
yshihyu 重新編輯於 2007-06-11 18:12:57, 註解 無‧
ldd
一般會員


發表:12
回覆:62
積分:19
註冊:2004-07-06

發送簡訊給我
#7 引用回覆 回覆 發表時間:2007-06-12 01:07:03 IP:61.57.xxx.xxx 訂閱
今天想了一下~ 或許將其想成類似 char (*pa)[5] ; 或許比較好想像一點
感覺上面的 範例有點把一維陣列當成二維陣列來看待~
如果真是如此 不曉得是否類似這樣的宣告有何作用??
用於哪些場合??
但是不曉得是否講的通 煩請高手指教,指點迷津~

harpist
資深會員


發表:3
回覆:251
積分:430
註冊:2002-10-03

發送簡訊給我
#8 引用回覆 回覆 發表時間:2007-06-12 13:40:22 IP:211.74.xxx.xxx 未訂閱
陣列只是形於外的表不必過執,不仿單純看作一種定址的方法。
範例只是用來表達的圖像,至於這樣宣告有何作用及使用場合,
在下認為也不需執著,當你需要的時候他就會出現在你的程式碼


===================引 用 ldd 文 章=================== 今天想了一下~ 或許將其想成類似 char (*pa)[5] ; 或許比較好想像一點
感覺上面的?範例有點把一維陣列當成二維陣列來看待~
如果真是如此 不曉得是否類似這樣的宣告有何作用??
用於哪些場合??
但是不曉得是否講的通 煩請高手指教,指點迷津~

------
~§~迷時師渡,悟了自渡~§~
編輯記錄
harpist 重新編輯於 2007-06-12 15:06:12, 註解 錯字@@‧
系統時間:2024-04-26 17:12:24
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!