|
|||||||||||
| 技術(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 |
在初學(xué)園地發(fā)了沒人回的指針問(wèn)題 |
| 作者:初始化 欄目:單片機(jī) |
我將這個(gè)問(wèn)題簡(jiǎn)化為對(duì)兩個(gè)連續(xù)地址單元的賦值,實(shí)際應(yīng)用中隊(duì)列大小并不知道,所以不能用數(shù)組,給*i以及下一地址賦值,然后再調(diào)用此指針,問(wèn)題是第二個(gè)地址單元被賦值0X00,匯編我也看了,也想不出為什么這么編譯。 #include <reg51.h> #define uCHAR unsigned CHAR #define uint unsigned int main() {uCHAR data *i; uCHAR TEMP; while(1) {i=&TEMP; *i=0x0f; *(i+1)=0xf0; P2=*i; P0=*(i+1); } } |
| 2樓: | >>參與討論 |
| 作者: computer00 于 2005/11/2 19:41:00 發(fā)布:
不會(huì)吧?是不是你搞錯(cuò)了? 我試過(guò),的確是將0xf0賦給下一地址了啊。 |
|
| 3樓: | >>參與討論 |
| 作者: taoest 于 2005/11/3 1:01:00 發(fā)布:
*(i+1) *(i+1) 是非法的,指向未知單元。你不能這樣用。 如果長(zhǎng)度不確定,請(qǐng)用malloc,或者直接指定一個(gè)最大值。 |
|
| 4樓: | >>參與討論 |
| 作者: 初始化 于 2005/11/3 9:32:00 發(fā)布:
問(wèn)題是我想調(diào)用此指針 分別賦值給P0,P2,然而有一個(gè)值不是我賦的,編譯器給于不同的地址,我不想用常量地址,太冒險(xiǎn),,因此我賦給它一個(gè)變量地址。簡(jiǎn)單的問(wèn):在使用一不固定長(zhǎng)度數(shù)據(jù)隊(duì)列時(shí)大家是怎么用的。 |
|
| 5樓: | >>參與討論 |
| 作者: taoest 于 2005/11/3 18:03:00 發(fā)布:
malloc malloc |
|
| 6樓: | >>參與討論 |
| 作者: 石湖天隨 于 2005/11/5 15:52:00 發(fā)布:
怎么能夠這樣用啊! 樓主你怎么能夠確定&(i+1)沒有被占用,說(shuō)不定它被分給一個(gè)很重要的全局變量,沒有死機(jī)是你運(yùn)氣了。感覺和數(shù)組越界操作很像。 |
|
| 7樓: | >>參與討論 |
| 作者: 李冬發(fā) 于 2005/11/5 20:29:00 發(fā)布:
樓主,你的確犯了不可饒恕的錯(cuò)! uchar TEMP; i=&TEMP; *i就是TEMP,那*(i+1)在哪?不完蛋才怪 to:taoest,在單片機(jī)或嵌入式系統(tǒng)中盡量不用malloc! |
|
| 8樓: | >>參與討論 |
| 作者: 初始化 于 2005/11/30 17:48:00 發(fā)布:
偶爾路過(guò)有人回答,萬(wàn)分感謝但... 我指針的確用得很少,平時(shí)盡量用數(shù)組,在我的理解中,*(i+1)就是*i的下一地址單元,至于間隔就看i是短還是長(zhǎng);我只看過(guò)和數(shù)組有關(guān)聯(lián)的指針有*(i+1)這種用法,實(shí)際上單獨(dú)用指針編譯器將其賦給下一地址。因?yàn)?a target="_blank" href="http://m.58mhw.cn/icstock/297/TEMP.html">TEMP沒給一固定地址,所以接下來(lái)的所有數(shù)據(jù)地址都是靠編譯器來(lái)確定。我現(xiàn)在是用最大的數(shù)組來(lái)做隊(duì)列;我覺的這個(gè)問(wèn)題還是弄清楚為好。 |
|
| 9樓: | >>參與討論 |
| 作者: gwnpeter 于 2005/12/2 10:10:00 發(fā)布:
嚴(yán)重的錯(cuò)誤! uchar TEMP會(huì)被編譯器分配為R寄存器, 從而造成*(i+1)無(wú)法被分配空間, 而且很有可能產(chǎn)生空間沖突,造成整個(gè)程序運(yùn)行的混亂. 指針是一個(gè)很有用的東西,但是很多程序的錯(cuò)誤運(yùn)行都是指針的非法使用造成的!!! |
|
|
|
| 免費(fèi)注冊(cè)為維庫(kù)電子開發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào) |