<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>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                【69.1 宏函數sizeof()的基礎知識。】 宏函數sizeof()是用來獲取某個對象所占用的字節數。既然是“宏”,就說明它不是單片機執行的函數,而是單片機之外的C編譯器執行的函數(像#define這類宏語句一樣),也就是說,在單片機上電之前,C編譯器在電腦端翻譯我們的C語言程序的時候,一旦發現了這個宏函數sizeof,它就會在電腦端根據C語言程序的一些關鍵字符(比如“unsigned char,\[,\]”這類字符)來自動計算這個對象所占用的字節數,然后再把我們C語言程序里所有的sizeof字符替換等效成一個“常量數字”,1代表1個字節,5代表5個字節,1000代表1000個字節。所謂在單片機之外執行的宏函數,就是說,在“計算”這些對象所占的字節數的時候,這個“計算”的工作只占用電腦的內存(C編譯器是在電腦上運行的),并不占用單片機的ROM容量和內存。而其它在單片機端執行的“非宏”函數,是占用單片機的ROM容量和內存。比如: unsigned char a; //變量。占用1個字節 unsigned int b; //變量。占用2個字節 unsigned long c; //變量。占用4個字節 code unsigned char d\[9\]; //常量。占用9個字節 unsigned int Gu16GetBytes; //這個變量用來獲取字節數 Gu16GetBytes=sizeof(a); //單片機上電后,在單片機程序里等效于Gu16GetBytes=1; Gu16GetBytes=sizeof(b); //單片機上電后,在單片機程序里等效于Gu16GetBytes=2; Gu16GetBytes=sizeof(c); //單片機上電后,在單片機程序里等效于Gu16GetBytes=4; Gu16GetBytes=sizeof(d); //單片機上電后,在單片機程序里等效于Gu16GetBytes=9; 上述的“sizeof字符”在進入到單片機的層面的時候,已經被編譯器預先替換成對應的“常量數字”的,這個“常量數字”就代表所占用的字節數。 【69.2 宏函數sizeof()的作用。】 在項目中,通常用在兩個方面:一方面是用在求一個數組的大小尺寸,另一方面是用在計算內存分配時候的偏移量。當然,sizeof并不是“剛需”,如果沒有sizeof宏函數,我們也可以人工計算出一個對象所占用的字節數,只是,人工計算,一方面容易出錯,另一方面代碼往往“動一發而牽全身”,改一個變量往往就會涉及很多地方需要配合調整更改,沒法做到“自由裁剪”的境界。下面舉一個程序例子:要把3個不同長度的數組“合并”成1個數組。 第一種情況:在沒有使用sizeof宏函數時,人工計算字節數和偏移量: unsigned char a\[2\]={1,2}; //占用2個字節 unsigned char b\[3\]={3,4,5}; //占用3個字節 unsigned char c\[4\]={6,7,8,9}; //占用4個字節 unsigned char HeBing\[9\];//合并a,b,c在一起的數組。這里的9是人工計算a,b,c容量累加所得。 unsigned char i; //循環變量i for(i=0;i<2;i++) //這里的2,是人工計算出a占用2個字節 { HeBing\[i+0\]=a\[i\]; //從HeBing數組的偏移量第0個地址開始存放。 } for(i=0;i<3;i++) //這里的3,是人工計算出b占用3個字節 { HeBing\[i+2\]=b\[i\]; //這里的2是人工計算出的偏移量。a占用了數組2個字節。 } for(i=0;i<4;i++) //這里的4,是人工計算出c占用4個字節 { HeBing\[i+2+3\]=c\[i\]; //這里的2和3是人工計算出的偏移量,a和b占用了數組2+3個字節。 } 第二種情況:在使用sizeof宏函數時,利用C編譯器自動來計算字節數和偏移量: unsigned char a\[2\]={1,2}; //占用2個字節 unsigned char b\[3\]={3,4,5}; //占用3個字節 unsigned char c\[4\]={6,7,8,9}; //占用4個字節 unsigned char HeBing\[sizeof(a)+sizeof(b)+sizeof(c)\];//C編譯器自動計算字節數 unsigned char i; for(i=0;i<sizeof(a);i++) //C編譯器自動計算字節數 { HeBing\[i+0\]=a\[i\]; } for(i=0;i<sizeof(b);i++) //C編譯器自動計算字節數 { HeBing\[i+sizeof(a)\]=b\[i\]; //C編譯器自動計算偏移量 } for(i=0;i<sizeof(c);i++) //C編譯器自動計算字節數 { HeBing\[i+sizeof(a)+sizeof(b)\]=c\[i\]; //C編譯器自動計算偏移量 } 【69.3 例程練習和分析。】 現在編寫一個練習的程序: /\*---C語言學習區域的開始。-----------------------------------------------\*/ unsigned char a\[2\]={1,2}; //占用2個字節 unsigned char b\[3\]={3,4,5}; //占用3個字節 unsigned char c\[4\]={6,7,8,9}; //占用4個字節 unsigned char HeBing\[sizeof(a)+sizeof(b)+sizeof(c)\];//C編譯器自動計算字節數 unsigned char i; void main() //主函數 { for(i=0;i<sizeof(a);i++) //C編譯器自動計算字節數 { HeBing\[i+0\]=a\[i\]; } for(i=0;i<sizeof(b);i++) //C編譯器自動計算字節數 { HeBing\[i+sizeof(a)\]=b\[i\]; //C編譯器自動計算偏移量 } for(i=0;i<sizeof(c);i++) //C編譯器自動計算字節數 { HeBing\[i+sizeof(a)+sizeof(b)\]=c\[i\]; //C編譯器自動計算偏移量 } for(i=0;i<sizeof(HeBing);i++) //利用宏sizeof計算出HeBing數組所占用的字節數 { View(HeBing\[i\]); //把HeBing所有數據挨個依次全部發送到電腦端觀察 } 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個數 十進制:8 十六進制:8 二進制:1000 第9個數 十進制:9 十六進制:9 二進制:1001 分析: HeBing\[0\]為1。 HeBing\[1\]為2。 HeBing\[2\]為3。 HeBing\[3\]為4。 HeBing\[4\]為5。 HeBing\[5\]為6。 HeBing\[6\]為7。 HeBing\[7\]為8。 HeBing\[8\]為9。 【69.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>

                              哎呀哎呀视频在线观看