|
建議好好學(xué)習(xí)取地址與指針方面的知識(shí),以及在51單片機(jī)中的應(yīng)用。你的目的不應(yīng)該是讓程序編譯通過,而是搞懂每一個(gè)語句、每一個(gè)符號(hào)的意思。x[3],表示x是數(shù)組變量。&x[n]表示數(shù)組第n號(hào)元素的地址,已經(jīng)算是指針了。你的程序中,x[1].d是第一號(hào)元素的結(jié)構(gòu)體變量中的d變量, &(x[1].d)表示取得第一號(hào)元素的結(jié)構(gòu)體變量中的d變量所在的單元地址。 unsigned int a,表示a是一個(gè)整數(shù)變量,接收整形數(shù)據(jù)。
你的程序的目的是把數(shù)組中某個(gè)元素對(duì)應(yīng)的結(jié)構(gòu)體內(nèi)的兩個(gè)字符行數(shù)據(jù)轉(zhuǎn)換為整形數(shù)據(jù)后,賦值給a。
明白這個(gè)目的后,可以使用a= *((unsigned int *)&(x[1].d));也可以使用a=x[1].d*256+x[1].e;獲得轉(zhuǎn)換結(jié)果。
51系列中保存int型數(shù)據(jù)時(shí),數(shù)據(jù)保存在兩個(gè)單元中。高8位數(shù)據(jù)放在低地址單元中,低8位數(shù)據(jù)放在高地址單元。比如258這個(gè)數(shù)據(jù),轉(zhuǎn)換為16進(jìn)制數(shù)據(jù)為0x0102,假設(shè)這個(gè)數(shù)據(jù)保存在地址0x0008開始的單元中,那么0x0008單元中保存0x01,0x0009單元中保存0x02。
要注意的是,c語言中,針對(duì)不同的處理器,整形所占用的基本存儲(chǔ)單元是不一樣的。 |
|