請教指標問題... |
尚未結案
|
Sarick
一般會員 發表:14 回覆:19 積分:6 註冊:2004-01-19 發送簡訊給我 |
|
dllee
站務副站長 發表:321 回覆:2519 積分:1711 註冊:2002-04-15 發送簡訊給我 |
請問您的 Code 是從書上來的還是現有程式呢?
因為這個 Code 是有 BUG 的... char CC_L = 0x32;
char CC_H = 0x00;
long CC; 以上三行應該是不需要解釋吧 ,只是單純的宣告變數及給初始值。 *(& href="http://www.ViewMove.com" target="blank">視動科技 VMASK - ViewMove Automation Software Kernel 發表人 - dllee 於 2004/07/05 21:39:59
------
http://www.ViewMove.com |
richtop
資深會員 發表:122 回覆:646 積分:468 註冊:2003-06-10 發送簡訊給我 |
Sarick 您好: &(變數名稱):表示取得該變數存放在記憶體中的位址。
所以任何變數所傳回的記憶體位址資料(值可以不同)的長度都是一樣,也就是該變數所存放的位址。 *(記憶體位址):表示取得自該記憶體位址算起,某變數儲存資料長度範圍內的值。
所以除了起始記憶體位置外,還要告知compiler是要提取哪種型態的變數? *(&CC):先取得CC的位址,再讀取該位址的值。這就好像要把值存入CC的第一個位元組中。
不過,當使用*(位址)時,我們並沒有告知complier是要讀取什麼樣長度的資料,所以理論上compiler會依其內定的資料型態去讀取資料,但不見得是我們要的。因此一個比較精確的方法是把該位址所指的資料型態明確給定:
*( (char *) &CC ):此時就會把char形態的資料填入CC變數的第一個位元組中。 綜合上面的說明,可以知道
char CC_L = 0x32;
char CC_H = 0x00;
long CC; *(&CC) = CC_L;
*(&CC 1) = CC_H; 程式碼的用意就是要把CC_H,CC_L別填入CC的low word的高,低位元組。
只是這樣的寫法不夠精確,建議改成: *((char*) &CC ) = CC_L;
*((char*) &CC 1) = CC_H; // (char*)&CC 1:指向下一個char的位址。 另外在 C Builder 6 中,long的長度是4-bytes,所以上述的寫法不儘完善。
在Intel的處理器中,資料的存放規則是:(以兩個位元組為例)
低位元組放低位址,高位元組放高位址。 RichTop 敬上
|
Sarick
一般會員 發表:14 回覆:19 積分:6 註冊:2004-01-19 發送簡訊給我 |
|
richtop
資深會員 發表:122 回覆:646 積分:468 註冊:2003-06-10 發送簡訊給我 |
|
Sarick
一般會員 發表:14 回覆:19 積分:6 註冊:2004-01-19 發送簡訊給我 |
|
Sarick
一般會員 發表:14 回覆:19 積分:6 註冊:2004-01-19 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |