<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                【63.1 化整為零的“靈活”應用。】 上一節講“化整為零”的例子,指針是跟數組的首地址(下標是0)“綁定”的,這樣,很多初學者就誤以為指針跟數組“綁定”時,只能跟數組的“首地址”關聯。其實,指針是可以跟數組的任何一個成員的地址“綁定”(只要不超過數組的長度導致越界),它不僅僅局限于首地址,指針的這個特征就是本節標題所說的“靈活”。請看下面這個例子: 有3個變量,分別是單字節unsigned char a,雙字節unsigned int b,四字節unsigned long c,它們加起來一共有7個字節,要把這7個字節放到一個7字節容量的數組里。除了用傳統的“移位法”,還有一種更加便捷的“指針法”,代碼如下: unsigned char a=0x01; unsigned int b=0x0203; unsigned long c=0x04050607; unsigned char Gu8BufferABC\[7\]; //存放3個不同長度變量的數組 unsigned char \*pu8; //引入的unsigned char 類型指針 unsigned int \*pu16; //引入的unsigned int 類型指針 unsigned long \*pu32; //引入的unsigned long 類型指針 pu8=&Gu8BufferABC\[0\]; //指針跟數組的第0個位置“綁定”起來。 \*pu8=a; //把a的1個字節放在數組第0個位置。 pu16=(unsigned int \*)&Gu8BufferABC\[1\]; //指針跟數組的第1個位置“綁定”起來。 \*pu16=b; //把b的2個字節放在數組第1、2這兩個位置。 pu32=(unsigned long \*)&Gu8BufferABC\[3\]; //指針跟數組的第3個位置“綁定”起來。 \*pu32=c; //把c的4個字節放在數組第3、4、5、6這四個位置。 【63.2 化零為整的“靈活”應用。】 剛才講的是“化整為零”,現在講的是“化零為整”。剛才講的是“分解”,現在講的是“合成”。請看下面這個例子: 有一個容量為7字節數組,第0字節存放的是unsigned char d變量,第1、2字節存放的是unsigned int e變量,第3、4、5、6字節存放的是unsigned long f變量,現在要從數組中“零散”的字節里提取并且合成為“完整”的3個變量。代碼如下: unsigned char Gu8BufferDEF\[7\]={0x01,0x02,0x03,0x04,0x05,0x06,0x07}; //注意大小端的問題 unsigned char d; unsigned int e; unsigned long f; unsigned char \*pu8; //引入的unsigned char 類型指針 unsigned int \*pu16; //引入的unsigned int 類型指針 unsigned long \*pu32; //引入的unsigned long 類型指針 pu8=&Gu8BufferDEF\[0\]; //指針跟數組的第0個位置“綁定”起來。 d=\*pu8; //從數組第0位置提取單字節完整的d變量。 pu16=(unsigned int \*)&Gu8BufferDEF\[1\]; //指針跟數組的第1個位置“綁定”起來。 e=\*pu16; //從數組第1,2位置提取雙字節完整的e變量。 pu32=(unsigned long \*)&Gu8BufferDEF\[3\]; //指針跟數組的第3個位置“綁定”起來。 f=\*pu32; //從數組第3,4,5,6位置提取四字節完整的f變量。 【63.3 例程練習和分析。】 現在編一個練習程序。 /\*---C語言學習區域的開始。-----------------------------------------------\*/ unsigned char a=0x01; unsigned int b=0x0203; unsigned long c=0x04050607; unsigned char Gu8BufferABC\[7\]; //存放3個不同長度變量的數組 unsigned char Gu8BufferDEF\[7\]={0x01,0x02,0x03,0x04,0x05,0x06,0x07}; //注意大小端的問題 unsigned char d; unsigned int e; unsigned long f; unsigned char \*pu8; //引入的unsigned char 類型指針 unsigned int \*pu16; //引入的unsigned int 類型指針 unsigned long \*pu32; //引入的unsigned long 類型指針 void main() //主函數 { //第1類例子:化整為零。 pu8=&Gu8BufferABC\[0\]; //指針跟數組的第0個位置“綁定”起來。 \*pu8=a; //把a的1個字節放在數組第0個位置。 pu16=(unsigned int \*)&Gu8BufferABC\[1\]; //指針跟數組的第1個位置“綁定”起來。 \*pu16=b; //把b的2個字節放在數組第1、2這兩個位置。 pu32=(unsigned long \*)&Gu8BufferABC\[3\]; //指針跟數組的第3個位置“綁定”起來。 \*pu32=c; //把c的4個字節放在數組第3、4、5、6這四個位置。 //第2類例子:化零為整。 pu8=&Gu8BufferDEF\[0\]; //指針跟數組的第0個位置“綁定”起來。 d=\*pu8; //從數組第0位置提取單字節完整的d變量。 pu16=(unsigned int \*)&Gu8BufferDEF\[1\]; //指針跟數組的第1個位置“綁定”起來。 e=\*pu16; //從數組第1,2位置提取雙字節完整的e變量。 pu32=(unsigned long \*)&Gu8BufferDEF\[3\]; //指針跟數組的第3個位置“綁定”起來。 f=\*pu32; //從數組第3,4,5,6位置提取四字節完整的f變量。 View(Gu8BufferABC\[0\]); //把第1個數Gu8BufferABC\[0\]發送到電腦端的串口助手軟件上觀察。 View(Gu8BufferABC\[1\]); //把第2個數Gu8BufferABC\[1\]發送到電腦端的串口助手軟件上觀察。 View(Gu8BufferABC\[2\]); //把第3個數Gu8BufferABC\[2\]發送到電腦端的串口助手軟件上觀察。 View(Gu8BufferABC\[3\]); //把第4個數Gu8BufferABC\[3\]發送到電腦端的串口助手軟件上觀察。 View(Gu8BufferABC\[4\]); //把第5個數Gu8BufferABC\[4\]發送到電腦端的串口助手軟件上觀察。 View(Gu8BufferABC\[5\]); //把第6個數Gu8BufferABC\[5\]發送到電腦端的串口助手軟件上觀察。 View(Gu8BufferABC\[6\]); //把第7個數Gu8BufferABC\[6\]發送到電腦端的串口助手軟件上觀察。 View(d); //把第8個數d發送到電腦端的串口助手軟件上觀察。 View(e); //把第9個數e發送到電腦端的串口助手軟件上觀察。 View(f); //把第10個數f發送到電腦端的串口助手軟件上觀察。 while(1) { } } /\*---C語言學習區域的結束。-----------------------------------------------\*/ 在電腦串口助手軟件上觀察到的程序執行現象如下: 開始... 第1個數 十進制:1 十六進制:1 二進制:1 第2個數 十進制:2 十六進制:2 二進制:10 第3個數 十進制:3 十六進制:3 二進制:11 第4個數 十進制:4 十六進制:4 二進制:100 第5個數 十進制:5 十六進制:5 二進制:101 第6個數 十進制:6 十六進制:6 二進制:110 第7個數 十進制:7 十六進制:7 二進制:111 第8個數 十進制:1 十六進制:1 二進制:1 第9個數 十進制:515 十六進制:203 二進制:1000000011 第:個數(這里是第10個數。本模塊程序只支持顯示第1到第9個,所以這里沒有顯示“10”) 十進制:67438087 十六進制:4050607 二進制:100000001010000011000000111 分析: Gu8BufferABC\[0\]為0x01。 Gu8BufferABC\[1\]為0x02。 Gu8BufferABC\[2\]為0x03。 Gu8BufferABC\[3\]為0x04。 Gu8BufferABC\[4\]為0x05。 Gu8BufferABC\[5\]為0x06。 Gu8BufferABC\[6\]為0x07。 d為0x01。 e為0x0203。 f為0x04050607。 【63.4 如何在單片機上練習本章節C語言程序?】 直接復制前面章節中第十一節的模板程序,練習代碼時只需要更改“C語言學習區域”的代碼就可以了,其它部分的代碼不要動。編譯后,把程序下載進帶串口的51學習板,通過電腦端的串口助手軟件就可以觀察到不同的變量數值,詳細方法請看第十一節內容。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看