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

請問一個指標ㄉ問題..

尚未結案
Sarick
一般會員


發表:14
回覆:19
積分:6
註冊:2004-01-19

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-06-26 15:38:53 IP:218.174.xxx.xxx 未訂閱
請問各位前輩, 下面這段Code 是什麼意思阿?? int h[100]; *((WORD *)&(h[10])) = 0x0000; 非常感謝您ㄉ指教...
pwipwi
版主


發表:68
回覆:629
積分:349
註冊:2004-04-08

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-06-26 16:58:46 IP:211.76.xxx.xxx 未訂閱
引言: 請問各位前輩, 下面這段Code 是什麼意思阿?? int h[100]; *((WORD *)&(h[10])) = 0x0000; 非常感謝您ㄉ指教...
Sarick你好: &(h[10])--->在h陣列第10個元素的地方,取得其位置 (WORD*)---->然後將位置的指標轉型(本來是int*,轉成short*) *... = 0x0000----->然0放入指標所指向的地方。 會這麼寫的用意是保留h[10]的高位數16個bit(int是32bit,WORD是16bit) 結果和下面的Code一樣。
h[10] = h[10] & 0xFFFF0000 
發表人 - pwipwi 於 2004/06/26 16:59:45
Sarick
一般會員


發表:14
回覆:19
積分:6
註冊:2004-01-19

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-06-27 13:31:50 IP:218.174.xxx.xxx 未訂閱
pwipwi 前輩你好, 能不能請教前輩, 那如果是 BYTE h[100]; *((WORD *)&(h[10])) = 0xff; 是不是指說取陣列10及11位址指的值轉型成為WORD 那最外面ㄉ*(...)是什麼意思ㄋ?? 感謝您ㄉ指導
pwipwi
版主


發表:68
回覆:629
積分:349
註冊:2004-04-08

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-06-28 14:50:32 IP:211.76.xxx.xxx 未訂閱
Sarick你好:    我把程式碼再解開一次,有問題的地方再提出來吧。
*((WORD *)&(h[10])) = 0xff;
上面這一行可以轉成下面這些程式碼,結果是一樣的。    int* IntPointerToAraayItem10 = &(h[10); 
//IntPointerToAraayItem10是一個指標,指向h陣列第10個元素的位置    WORD* PWordToArrayItem10 = IntPointerToAraayItem10;
//PWordToArrayItem10也是指向h陣列第10個元素的位置,只是型態不同    *PWordToArrayItem10 = 0xff;
//這段程式碼是將0xff數值,放到PWordToArrayItem10所指向的位置,這個位
//置也就是陣列第10個元素的位置
這和程式碼h[10]=0xff做的事情是大同小異。 差別在當指標由int*換成WORD*後,0xff會被當成一個WORD的型態,並放入陣列第10個元素的地方。要是沒有加上這個轉換,Oxff會被當會一個int的型態放入。 在bcb中int是32位元,WORD是16位元。所以將0xff當成一個WORD的型態放入時,不會更改到原來陣列裡的16個高位元。差別在此。 說得有點複雜…希望你可以了解 發表人 -
Sarick
一般會員


發表:14
回覆:19
積分:6
註冊:2004-01-19

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-06-30 09:03:56 IP:210.202.xxx.xxx 未訂閱
真ㄉ非常感謝前輩詳盡ㄉ解說    感謝感謝!!    
系統時間:2024-06-27 2:22:37
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!