請問有人看過PBYTE型態的變數嗎?? |
答題得分者是:JerryKuo
|
aredfish
一般會員 ![]() ![]() 發表:47 回覆:41 積分:17 註冊:2002-12-04 發送簡訊給我 |
大家好,我有一支程式裡面大量用到了P開頭型態的變數,例如PBYTE,PVOID等等
根據Help裡的說明這是指標型態的unsigned char及void, 但是我無法理解這個意義. 另外,程式裡面也用到了 PBYTE pData = PVOID pBuffer; 這樣子的轉換
在這一部份我無法理解的是,這明明是兩種不同型別的轉換,為什麼組譯時不會出錯(原來的程式組譯不會錯,不過我如果把類似的邏輯寫到其他的程式裡面就會出現型別轉換的錯誤)
以上兩個問題煩請各位大大努力相告...萬分感謝
|
RaynorPao
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:139 回覆:3622 積分:7025 註冊:2002-08-12 發送簡訊給我 |
引言: 大家好,我有一支程式裡面大量用到了P開頭型態的變數,例如PBYTE,PVOID等等 根據Help裡的說明這是指標型態的unsigned char及void, 但是我無法理解這個意義. 另外,程式裡面也用到了 PBYTE pData = PVOID pBuffer; 這樣子的轉換 在這一部份我無法理解的是,這明明是兩種不同型別的轉換,為什麼組譯時不會出錯(原來的程式組譯不會錯,不過我如果把類似的邏輯寫到其他的程式裡面就會出現型別轉換的錯誤) 以上兩個問題煩請各位大大努力相告...萬分感謝 aredfish 你好: (1)「PBYTE」就是「BYTE*」,「PVOID」就是「VOID*」 (2)「VOID」在 C 裡面是指「Any type」,也就是可以代表任何的型態,所以 「PVOID」代表指向任何型態的指標,因此你上面的程式碼在編譯的時候,當 然是合法的語法 (3)你所說的類似邏輯是指什麼呢?? 是否舉一個明確的例子??
------
-- 若您已經得到滿意的答覆,請適時結案!! -- -- 欲知前世因,今生受者是;欲知來世果,今生做者是 -- -- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 -- |
JerryKuo
版主 ![]() ![]() ![]() ![]() ![]() 發表:42 回覆:571 積分:322 註冊:2003-03-10 發送簡訊給我 |
|
aredfish
一般會員 ![]() ![]() 發表:47 回覆:41 積分:17 註冊:2002-12-04 發送簡訊給我 |
謝謝兩位的回答,不過我觀念還是有點模糊,我舉下面一個例子來看看
BYTE *pDATA 是不是就類似 PBYTE pDATA 兩個都是動態的陣列,但前者當引數
的時候用傳址呼叫(&pDATA),而後者只要直接傳遞變數名就好了. 另外,我程式中有一個按鈕,按鈕裡面什麼程式碼也沒有, 只有兩行
PVOID pBuffer;
PBYTE pData = pBuffer;
這樣子編譯的話(BCB5.0)會告訴我Cannot convert 'void*'to'unsigned char'
這部分就是我所提到型別轉換的錯誤
|
RaynorPao
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:139 回覆:3622 積分:7025 註冊:2002-08-12 發送簡訊給我 |
引言: 謝謝兩位的回答,不過我觀念還是有點模糊,我舉下面一個例子來看看 BYTE *pDATA 是不是就類似 PBYTE pDATA 兩個都是動態的陣列,但前者當引數 的時候用傳址呼叫(&pDATA),而後者只要直接傳遞變數名就好了. 另外,我程式中有一個按鈕,按鈕裡面什麼程式碼也沒有, 只有兩行 PVOID pBuffer; PBYTE pData = pBuffer; 這樣子編譯的話(BCB5.0)會告訴我Cannot convert 'void*'to'unsigned char' 這部分就是我所提到型別轉換的錯誤 aredfish 你好: (1)「BYTE *pDATA」跟「PBYTE pDATA」這兩種寫法是一樣的,自然用法也一樣 (2)也許你可以把「PBYTE」「PVOID」看成一個較小的集合,及一個較大的集合 如果要將較小的集合 assign 給較大的集合當然沒問題,如果要將較大的集 合 assign 給較小的集合,當然會出問題 (像你舉的例子,就必須強制轉換 型別 PBYTE pData=(PBYTE)pBuffer;)-- Enjoy Researching & Developing --
------
-- 若您已經得到滿意的答覆,請適時結案!! -- -- 欲知前世因,今生受者是;欲知來世果,今生做者是 -- -- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 -- |
JerryKuo
版主 ![]() ![]() ![]() ![]() ![]() 發表:42 回覆:571 積分:322 註冊:2003-03-10 發送簡訊給我 |
引言: 謝謝兩位的回答,不過我觀念還是有點模糊,我舉下面一個例子來看看 BYTE *pDATA 是不是就類似 PBYTE pDATA 兩個都是動態的陣列,但前者當引數 的時候用傳址呼叫(&pDATA),而後者只要直接傳遞變數名就好了. BYTE *pDATA 和 PBYTE pDATA 是一樣的,使用的方式是一樣的啊 另外,我程式中有一個按鈕,按鈕裡面什麼程式碼也沒有, 只有兩行 PVOID pBuffer; PBYTE pData = pBuffer; PBYTE pData = (PBYTE)pBuffer 這樣子編譯的話(BCB5.0)會告訴我Cannot convert 'void*'to'unsigned char' 這部分就是我所提到型別轉換的錯誤 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |