|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
C語言賦值 |
| 作者:zmmhmily 欄目:技術(shù)交流 |
初學(xué)單片機(jī)C語言,假如我定義 unsigned CHAR address;address中放入地址 0x80,那么我往從這個地址開始的連續(xù)10個地址中送值應(yīng)該用什么語句,謝謝. |
| 2樓: | >>參與討論 |
| 作者: computer00 于 2006/1/4 13:09:00 發(fā)布:
使用指針 unsigned CHAR address; ((unsigned CHAR *)(&address))[0]= //偏移0,即address本身 ((unsigned CHAR *)(&address))[1]= //偏移1,即address接下來的一個字節(jié) |
|
| 3樓: | >>參與討論 |
| 作者: computer00 于 2006/1/4 13:16:00 發(fā)布:
其實(shí)樓主還不如干脆聲明成一個數(shù)組算了, unsigned CHAR address[10]; address[0]= address[1]= |
|
| 4樓: | >>參與討論 |
| 作者: 赤鑄 于 2006/1/4 17:54:00 發(fā)布:
if(要絕對定位&&是C51)用_at_關(guān)鍵字 CHAR idata array[10] _at_ 0x10; |
|
| 5樓: | >>參與討論 |
| 作者: computer00 于 2006/1/4 19:00:00 發(fā)布:
如果樓主所說的是從地址0x80開始,那么直接用指針也行 ((unsigned CHAR idata *)0x80)[0]= //偏移0,即地址在0x80 ((unsigned CHAR idata *)0x80)[1]= //偏移0,即地址在0x81 … … … |
|
| 6樓: | >>參與討論 |
| 作者: melearn 于 2006/1/4 19:28:00 發(fā)布:
請教赤鑄大蝦 _at_關(guān)鍵字在c語言書上有嗎,我沒見過啊,沒有的話在什么書上有啊 |
|
| 7樓: | >>參與討論 |
| 作者: 赤鑄 于 2006/1/4 19:45:00 發(fā)布:
這是C51擴(kuò)展的,非標(biāo)準(zhǔn)關(guān)鍵字 也可以用宏定義,C51的ABSACC.H里有,可以直接用 #define CBYTE ((unsigned CHAR volatile code *) 0) #define DBYTE ((unsigned CHAR volatile data *) 0) #define PBYTE ((unsigned CHAR volatile pdata *) 0) #define XBYTE ((unsigned CHAR volatile xdata *) 0) #define CWORD ((unsigned int volatile code *) 0) #define DWORD ((unsigned int volatile data *) 0) #define PWORD ((unsigned int volatile pdata *) 0) #define XWORD ((unsigned int volatile xdata *) 0) |
|
| 8樓: | >>參與討論 |
| 作者: computer00 于 2006/1/4 20:10:00 發(fā)布:
keil C的用戶手冊里有。 |
|
| 9樓: | >>參與討論 |
| 作者: awey 于 2006/1/4 21:05:00 發(fā)布:
圈圈的這段好費(fèi)解 ? unsigned CHAR address; ((unsigned CHAR *)(&address))[0]= //偏移0,即address本身 ((unsigned CHAR *)(&address))[1]= //偏移1,即address接下來的一個字節(jié) |
|
| 10樓: | >>參與討論 |
| 作者: computer00 于 2006/1/4 21:37:00 發(fā)布:
這哪里有費(fèi)解的? |
|
| 11樓: | >>參與討論 |
| 作者: 楊工 于 2006/1/4 22:28:00 發(fā)布:
為什么不直接用指針? unsigned CHAR array[10]; //定義數(shù)組,c語言中不提倡變量用絕對地址 //如果有必要用絕對地址,聽赤鑄的 unsigned CHAR *p; //定義1個指向unsigned CHAR的指針 p=array; //p賦值,數(shù)組名就是指針 p=&array[0]; //也可以這樣 *p=??; //p指向的單元賦值 p++; //指針+1,指向下一個單元 *p++=?? //也可以把以上兩句合為1句 // |
|
| 12樓: | >>參與討論 |
| 作者: computer00 于 2006/1/4 23:44:00 發(fā)布:
我暈……樓上的你這不是在浪費(fèi)空間和時間嗎? 都有unsigned CHAR array[10]; 了,你還搞個指針出來? 直接array[n]=??;不是很悠閑? |
|
| 13樓: | >>參與討論 |
| 作者: 赤鑄 于 2006/1/5 0:01:00 發(fā)布:
指針便于循環(huán),固定的當(dāng)然可以不用 |
|
| 14樓: | >>參與討論 |
| 作者: 赤鑄 于 2006/1/5 0:02:00 發(fā)布:
不過有時用指針效率更高 無論空間效率還是時間效率,因?yàn)橹羔樧兞靠赡鼙粌?yōu)化為寄存器,這要看具體代碼和編譯器的優(yōu)化了 |
|
| 15樓: | >>參與討論 |
| 作者: zmmhmily 于 2006/1/6 8:28:00 發(fā)布:
偶去試試,多謝各位 |
|
| 16樓: | >>參與討論 |
| 作者: waha 于 2006/1/6 17:50:00 發(fā)布:
各位耐心真好. |
|
| 17樓: | >>參與討論 |
| 作者: 一個初學(xué)者 于 2006/1/7 21:35:00 發(fā)布:
學(xué)習(xí)中。感謝各位大蝦。 |
|
| 18樓: | >>參與討論 |
| 作者: lag3631 于 2006/1/8 12:43:00 發(fā)布:
c 用指針比較好 unsigned CHAR *p=&address; p++; |
|
| 19樓: | >>參與討論 |
| 作者: xzhenggen 于 2006/1/9 12:17:00 發(fā)布:
圈圈這段很有技巧. unsigned CHAR address; ((unsigned CHAR *)(&address))[0]= //偏移0,即address本身 ((unsigned CHAR *)(&address))[1]= //偏移1,即address接下來的一個字節(jié) |
|
| 20樓: | >>參與討論 |
| 作者: 進(jìn)程 于 2006/1/9 15:13:00 發(fā)布:
總結(jié)一下 最方便的用法是數(shù)組:unsigned CHAR address[10]; 要想用循環(huán)作用,可考慮加上指針:unsigned CHAR *p; p=address; 指針的作用要隨編譯器的不同而不同,總之,用上比不用好! |
|
| 21樓: | >>參與討論 |
| 作者: 12分 于 2006/1/10 18:07:00 發(fā)布:
computer00的語句可以編譯通過,但是編譯器會取消該變量的 為什么用比不用好?愿聽其詳!! |
|
| 22樓: | >>參與討論 |
| 作者: computer00 于 2006/1/10 18:40:00 發(fā)布:
編譯器會取消該變量,是什么意思? 如果編譯器會把改語句優(yōu)化掉,那就加上volatile關(guān)鍵詞來修飾。不過我在keil里面用,都沒被優(yōu)化掉過。 |
|
| 23樓: | >>參與討論 |
| 作者: remex2005 于 2006/1/11 12:49:00 發(fā)布:
圈圈的提法也有些問題 unsigned CHAR address; ((unsigned CHAR *)(&address))[0]= //偏移0,即address本身 ((unsigned CHAR *)(&address))[1]= //偏移1,即address接下來的一個字節(jié) address只申請了一個字節(jié)的內(nèi)存空間,而((unsigned CHAR *)(&address))[1]= 進(jìn)行賦值操作的話會改寫address所分配的空間的下一個字節(jié)的內(nèi)容,而該字節(jié)有可能由編譯器已經(jīng)分配給別的變量。這就會出現(xiàn)最頭疼的難查的問題,即有內(nèi)存被改寫。上面提問題的摟主,本身提的問題就有問題,所以大家回答起來也就比較難了,呵呵。 看了上面各位大蝦的回復(fù),感覺大部分都是硬件科班出生,對c語言本質(zhì)上的某些東西還沒有理解透徹。個人觀點(diǎn),如有得罪壇子里的大蝦還請拍磚。 |
|
| 24樓: | >>參與討論 |
| 作者: 農(nóng)民講習(xí)所 于 2006/1/11 13:22:00 發(fā)布:
哪里這么寫,不是在找BUG嗎? unsigned CHAR address; ((unsigned CHAR *)(&address))[0]= //偏移0,即address本身 ((unsigned CHAR *)(&address))[1]= //偏移1,即address接下來的一個字節(jié) 這種代碼是絕對禁止的。通常說的野指針、跑飛什么的,都這樣做出來的。 |
|
| 25樓: | >>參與討論 |
| 作者: computer00 于 2006/1/11 13:43:00 發(fā)布:
這是樓主要求的功能。請仔細(xì)看樓主的要求。 我不是叫他去改成數(shù)組嗎? |
|
| 26樓: | >>參與討論 |
| 作者: 赤鑄 于 2006/1/12 16:55:00 發(fā)布:
再看樓主的提法 意思好像是要用變量尋址,這樣應(yīng)該用指針變量,而不是用個字節(jié)變量 TYPE idata * pointer = (TYPE idata *) 0x10; |
|
| 27樓: | >>參與討論 |
| 作者: computer00 于 2006/1/12 19:49:00 發(fā)布:
再看了看樓主的要求, “C語言賦值 初學(xué)單片機(jī)C語言,假如我定義 unsigned CHAR address;address中放入地址 0x80,那么我往從這個地址開始的連續(xù)10個地址中送值應(yīng)該用什么語句,謝謝.” 似乎他的要求是把地址放入到address中,然后再從這個地址(是不是指0x80?)開始往里面送值? 那干脆聲明一個指針叫做address, unsigned CHAR idata * address; unsigned CHAR i; address=(unsigned CHAR idata *)(0x80); for(i=0;i<10;i++) { address[i]=??; } |
|
|
|
| 免費(fèi)注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號 |