|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機 | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
c51指針問題 |
| 作者:liushaolin 欄目:單片機 |
我有這個三個函數(shù): void fun1 (unsigned CHAR pdata *p) void fun2 (unsigned CHAR xdata *p) void fun3 (unsigned CHAR code *p) 這三個函數(shù)的差異只在于:指針所指向數(shù)據(jù)區(qū)不同,后面的函數(shù)內(nèi)容完全相同。有沒有辦法把它合并成一個函數(shù)。怎么并。謝謝! |
| 2樓: | >>參與討論 |
| 作者: toobad 于 2006/7/15 8:41:00 發(fā)布:
可以阿 為什么不可以呢? |
|
| 3樓: | >>參與討論 |
| 作者: liushaolin 于 2006/7/15 8:45:00 發(fā)布:
toobad 兄: toobad 兄,怎么并啊,請說詳細點,謝謝! 是不是改成:void fun1 (unsigned CHAR *p)這樣?,我試過好象不行 |
|
| 4樓: | >>參與討論 |
| 作者: zgl7903 于 2006/7/15 12:38:00 發(fā)布:
個人見解 改為void fun(void *p)試試看,C51中void指針是三個字節(jié)的,可以支持C51中的所有24位空間內(nèi)的內(nèi)容。 |
|
| 5樓: | >>參與討論 |
| 作者: 平常人 于 2006/7/15 13:05:00 發(fā)布:
可以合并為一個函數(shù),但...... 可以改為void fun(void *p),但在函數(shù)里你還是要將指針p轉(zhuǎn)型為指向不同區(qū)域的指針,這是因為訪問不同的存儲區(qū)域需要用不同的指令,這一點編譯器是不會知道的,你必須明確指明。 unsigned CHAR pdata *pp; unsigned CHAR xdata *xp; unsigned CHAR code *cp; SWITCH (p) { case p points to pdata: pp = (unsigned CHAR pdata *)p; ..... break; case p points to xdata: xp = (unsigned CHAR xdata *)p; ..... break; case p points to code: cp = (unsigned CHAR code *)p; ..... break; } |
|
| 6樓: | >>參與討論 |
| 作者: 沈老 于 2006/7/15 17:11:00 發(fā)布:
一個檢查指針類型的函數(shù) //以下是一個檢查指針類型的函數(shù): unsigned CHAR data *dp; unsigned CHAR pdata *pp; unsigned CHAR xdata *xp; unsigned CHAR code *cp; CHAR CheckPointerType(CHAR *p) { CHAR type; type=*((CHAR*)&p); return type; } main() { CHAR pType; pType=CheckPointerType(dp);// 0x00 pType=CheckPointerType(pp);// 0xFE pType=CheckPointerType(xp);// 0x01 pType=CheckPointerType(cp);// 0xFF // } |
|
|
|
| 免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號 |