<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 《C與指針》讀書筆記六

          《C與指針》讀書筆記六

          作者: 時(shí)間:2016-08-15 來源:網(wǎng)絡(luò) 收藏

            在以前也使用過的運(yùn)算,但是在這本書里作者詳細(xì)的介紹了的“算數(shù)運(yùn)算”、“關(guān)系運(yùn)算”。的算數(shù)運(yùn)算一般是 指針±整數(shù)。實(shí)現(xiàn)起來非常簡單,我有位同事在R校驗(yàn)時(shí)也使用了。我們可以摘錄一段。

          本文引用地址:http://www.ex-cimer.com/article/201608/295500.htm

            U16 RC;

            U8 CRCH, CRCL;

            U8 *pUNChar;

            CRC = out_crc(UART0.RX_buf,UART0.RX_count-2);

            pUNChar = &CRC;

            CRCH = *(pUNChar++);

            CRCL = *pUNChar;

            此段代碼在單片機(jī)上運(yùn)行,所以U16是16位無符號(hào)整型數(shù)據(jù),也就是unsigned int CRC。U8是一個(gè)無符號(hào)char型數(shù)據(jù)。 CRC 接收了out_crc( )函數(shù)的返回。也就是一組數(shù)的crc計(jì)算結(jié)果。需要將CRC拆分為兩個(gè)8位數(shù)據(jù)。我們使用一個(gè)pUNChar指針指向該整型數(shù)據(jù)。在單片機(jī)中整型高8位存儲(chǔ)在地址,低8位存儲(chǔ)在高地址。

            CRCH = *(pUNChar++); 該條語句實(shí)現(xiàn)兩個(gè)功能。第一將pUNChar指向地址的值賦給CRCH。也就是*(pUNChar)賦給CRCH, 其實(shí)就是CRC的高8位賦給CRCH。第二pUNChar自增。也就是pUNChar++。 其實(shí)等價(jià)于以下兩條語句:

            CRCH = *pUNChar;

            pUNChar++;

            pUNChar++其實(shí)就是將pUNChar的值加1。也就是pUNChar指向CRC低8位。

            CRCL = *pUNChar;就非常好理解了。將pUNChar地址的值賦給CRCL。簡單快速的實(shí)現(xiàn)了一個(gè)整型數(shù)據(jù)的拆分。其中用到了指針的加法運(yùn)算。pUNChar是U8類型,所以pUNChar++是pUNChar值增加1。

            加入指針的類型是U16,加法運(yùn)算會(huì)怎樣。這個(gè)問題可以實(shí)驗(yàn)獲得。

            U16 arrary[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 } ;

            U16 *pU16;

            pU16 = arrary;

            pU16++;

            pU16 = arrary;是將pU16指向arrary首個(gè)成員地址,即arrary[0]的地址。

            pU16++是將pU16指向arrary第二個(gè)成員地址,即arrary[1]的地址。arrary[1]與arrary[0]地址相差2。因?yàn)閍rrary是U16,2個(gè)字節(jié)。所以地址相差為2. pU16++也就使pU16的值增大了2。所以指針的算數(shù)運(yùn)算的結(jié)果與本身的類型有關(guān)。指針關(guān)系運(yùn)算其實(shí)可以不使用的。比如書中的例子:

            #define N_VALUES 5

            float values[N_VALUES]

            float *vp;

            for( vp =&values[0]; vap < &values[N_VALUES];)

            *vap++ = 0;

            初始化了一個(gè)values數(shù)組,并且全部初始化為0。如果按照一般的寫法應(yīng)該為

            char i;

            for( i =0; i

            values[ i ] = 0.0;

            再見到作者的實(shí)現(xiàn)方法之前,我一直是用這種方法?,F(xiàn)在覺得作者的方法比較簡單。



          關(guān)鍵詞: C 指針

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();