|
技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測(cè)控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
RTOS相關(guān):誰(shuí)能解決這個(gè)指針問(wèn)題? |
作者:treul 欄目:嵌入式系統(tǒng) |
typedef struct t_msg { int a; CHAR b; } T_MSG; typedef struct _mess { SHORT c; unsigned int d; BOOL e; } NET_MSG; ER prcv_mbx(ID, T_MSG**); void func(int x) { NET_MSG *rmess; . . if(prcv_mbx((ID)mbxid, (T_MSG**)&rmess)==OK) rmess->e = TRUE; //請(qǐng)問(wèn)高手們,收到消息后,rmess仍舊是NET_MSG*類(lèi)型嗎?我認(rèn)為rmess指向的實(shí)際上應(yīng)該已經(jīng)是T_MSG類(lèi)型的東東了,對(duì)嗎? . . } |
2樓: | >>參與討論 |
作者: treul 于 2005/1/11 17:37:00 發(fā)布:
help 沒(méi)人能回答嗎? |
3樓: | >>參與討論 |
作者: computer00 于 2005/1/11 18:07:00 發(fā)布:
怎么會(huì)變呢?它依然是NET_MSG*類(lèi)型 強(qiáng)制類(lèi)型轉(zhuǎn)化,只是臨時(shí)的。 |
4樓: | >>參與討論 |
作者: treul 于 2005/1/11 18:32:00 發(fā)布:
但是, 消息實(shí)體是T_MSG結(jié)構(gòu)的啊。收到消息后,rmess的值(也就是一個(gè)地址),已經(jīng)是指向這個(gè)消息實(shí)體了啊。這時(shí)候再引用NET_MSG的成員還有意義嗎? |
5樓: | >>參與討論 |
作者: highend 于 2005/1/11 19:42:00 發(fā)布:
看一看 函數(shù)的調(diào)用,參數(shù)的傳遞....... 這屬于C語(yǔ)言的基本問(wèn)題 |
6樓: | >>參與討論 |
作者: computer00 于 2005/1/11 19:46:00 發(fā)布:
rmess的值,什么時(shí)候被改變了?不是一直沒(méi)有變么? |
7樓: | >>參與討論 |
作者: treul 于 2005/1/12 9:08:00 發(fā)布:
我知道,類(lèi)型轉(zhuǎn)化是臨時(shí)的,但是: prcv_mbx((ID)mbxid, (T_MSG**)&rmess) 中把rmess的地址作為參數(shù)傳遞給函數(shù),那么調(diào)用以后,rmess的地址上實(shí)際已經(jīng)存放了一個(gè)指向T_MSG結(jié)構(gòu)的指針了,對(duì)吧?那繼續(xù)把rmess當(dāng)作NET_MSG的指針來(lái)引用還有什么意義?rmess->e = ... |
8樓: | >>參與討論 |
作者: computer00 于 2005/1/12 12:28:00 發(fā)布:
暈 你在函數(shù)prcv_mbx((ID)mbxid, (T_MSG**)&rmess) 里改變了rmess的值么? 即使你改變它的值,它的類(lèi)型也是改變不了的。 rmess的類(lèi)型始終是NET_MSG,不管它指向了那里。 所以必須要用rmess->e 來(lái)訪問(wèn)。 如果你認(rèn)為rmess指向了T_MSG, 而用rmess指向T_MSG的成員,則編譯通不過(guò)。 rmess的類(lèi)型是改不了的。如果要改,只能在用的時(shí)候, 加強(qiáng)制類(lèi)型轉(zhuǎn)換,象prcv_mbx((ID)mbxid, (T_MSG**)&rmess)里的 那個(gè)強(qiáng)制類(lèi)型轉(zhuǎn)換。 |
9樓: | >>參與討論 |
作者: treul 于 2005/1/12 16:12:00 發(fā)布:
computer00: 謝先! 我說(shuō)了,我知道rmess的類(lèi)型沒(méi)有變。我是想說(shuō),在函數(shù)調(diào)用以后,雖然rmess的類(lèi)型沒(méi)有變(仍然是NET_MSG*),但是它實(shí)際上指向的地址處是一個(gè)T_MSG結(jié)構(gòu)的數(shù)據(jù)結(jié)構(gòu)。你說(shuō)是嗎??因?yàn)閜rcv_mbx函數(shù)的功能就是把一個(gè)T_MSG*型的指針(也就是消息指針)存放到T_MSG**處。我覺(jué)得這時(shí)候再用rmess引用NET_MSG的成員有點(diǎn)不解~ |
10樓: | >>參與討論 |
作者: computer00 于 2005/1/12 16:42:00 發(fā)布:
你怎么不把prcv_mbx函數(shù)貼上來(lái)? 你不貼出來(lái),我們?cè)趺粗纏rcv_mbx是否改變了rmess的值? |
11樓: | >>參與討論 |
作者: treul 于 2005/1/12 18:56:00 發(fā)布:
呵呵 謝謝了computer00! 交個(gè)朋友? 那個(gè)函數(shù)是內(nèi)核了,你也知道。uITRON4的。 我大致也整明白了。Thank u! |
12樓: | >>參與討論 |
作者: computer00 于 2005/1/12 20:11:00 發(fā)布:
客氣 |
13樓: | >>參與討論 |
作者: ruanhsh 于 2005/1/13 20:41:00 發(fā)布:
treul:你的理解是正確的 treul:你的理解是正確的,實(shí)際上,你記住一個(gè)關(guān)鍵點(diǎn), 在prcv_mbx內(nèi)部實(shí)現(xiàn),一定是將一個(gè)NET_MSG*賦值給rmess的, 只是這種賦值過(guò)程它會(huì)先通過(guò)強(qiáng)制為T(mén)_MSG*,就像你接口的類(lèi)型轉(zhuǎn)換一樣。 不然,rmess->e的就非預(yù)測(cè)的值了。 這種方法是為統(tǒng)一接口,其實(shí)做的并不是很好。 |
|
|
免費(fèi)注冊(cè)為維庫(kù)電子開(kāi)發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 udpf.com.cn 浙ICP證030469號(hào) |