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

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                【72.1 結構體指針的重要用途。】 結構體指針有兩個重要用途,一個是結構體數據的傳輸存儲和還原,另一個是作為結構體數據在涉及函數時的參數入口。 什么是“結構體數據的傳輸存儲和還原”?結構體本質是一個數組,數組內可能包含了許多不同數據長度類型的成員,當整個結構體數據需要存儲或者傳輸(通信)給另外一個單片機時,這時候有兩種選擇,一種是一個成員一個成員的挨個處理,這種“以成員為單位”的處理方式比較繁瑣麻煩,另外一種是把整個結構體變量當作一個“以字節為單位”的普通數組來處理,但是關鍵的問題來了,假如我們把整個結構體數據以“字節為單位”的方式“整體打包”傳遞給另外一個單片機,當這個接收方的單片機接收到我們這一組數據后,如何把這“一包”以字節為單位的數組“還原”成相同的結構體變量,以便在程序處理中也能直接按“結構體的方式”處理某個具體的成員,這時就涉及到結構體指針的應用。 什么是“作為結構體數據在涉及函數時的參數入口”?結構體數據一般內部包含了很多成員,當要把這一包數據傳遞給某個函數內部時,這個函數要給結構體數據預留參數入口,這時,如果函數以結構體成員的角度來預留入口,那么有多少個成員就要預留多少個函數的參數入口,可閱讀性非常差,操作起來也麻煩。但是,如果以指針的角度來預留入口,那么不管這個結構體內部包含多少個成員,只需要預留一個指針參數入口就夠用了,這就是絕大多32位單片機的庫函數都采樣結構體指針作為函數的參數入口的原因。 結構體指針這兩個重要用途后續章節會深入講解,本節的重點是先讓大家學會結構體指針的基礎知識,為后續章節做準備。 【72.2 結構體指針的基礎。】 操作結構體內部某個具體變量時,有兩種方式,一種是成員調用的方式,另一種是指針調用的方式。C語言語法為了區分這兩種方式,專門設計了兩種不同的操作符號。成員調用方式采樣小數點“.”的符號,指針調用方式采用箭頭“->”的符號。例子如下: struct StructMould\_1 { unsigned char u8Data\_A; unsigned long u32Data\_B; }; struct StructMould\_1 GtMould\_1; //“生成”一個變量。 //占用5個字節。 struct StructMould\_1 \*ptMould\_1; //定義一個結構體指針。 //占用3個字節。 void main() //主函數 { GtMould\_1.u8Data\_A=5; //“成員調用”的方式,用小數點符號“.” ptMould\_1=&GtMould\_1; //ptMould\_1指針與變量GtMould\_1建立關聯。 ptMould\_1->u8Data\_A=ptMould\_1->u8Data\_A+5; //“指針調用”的方式,用箭頭符號“->” while(1) { } } 分析:上述例子中,信息量很大,知識點有兩個。 第一個知識點:為什么結構體變量GtMould\_1占用5個字節,而結構體指針\*ptMould\_1只占用3個字節?結構體變量GtMould\_1所占的內存是由結構體成員內部的數量決定的,而結構體指針\*ptMould\_1是由C編譯器根據芯片硬件尋址范圍而決定的,在一個相同的C編譯器系統中,所有類型的指針所占用的字節數都是一樣的,比如在本教程中所用8位單片機的C51編譯器系統中,unsigned char \*,unsigned int \*,unsigned long \*,以及本節的struct StructMould\_1 \*,都是占用3個字節。32位單片機的指針往往都是4個字節,而某些64位的PC機,指針可能是8個字節,這些內容大家只要有個大概的了解即可。 第二個知識點:結構體成員GtMould\_1.u8Data\_A經過第一步的“成員調用”直接賦值5,緊接著經過“指針調用”的累加5操作,最后GtMould\_1.u8Data\_A的數值是10(5+5)。 【72.3 例程練習和分析。】 現在編寫一個練習的程序: /\*---C語言學習區域的開始。-----------------------------------------------\*/ struct StructMould\_1 { unsigned char u8Data\_A; unsigned long u32Data\_B; }; struct StructMould\_1 GtMould\_1; //“生成”一個變量。 //占用5個字節。 struct StructMould\_1 \*ptMould\_1; //定義一個結構體指針。 //占用3個字節。 void main() //主函數 { GtMould\_1.u8Data\_A=5; //“成員調用”的方式,用小數點符號“.” ptMould\_1=&GtMould\_1; //ptMould\_1指針與變量GtMould\_1建立關聯。 ptMould\_1->u8Data\_A=ptMould\_1->u8Data\_A+5; //“指針調用”的方式,用箭頭符號“->” View(sizeof(GtMould\_1)); //在電腦端觀察變量GtMould\_1占用多少個字節。 View(sizeof(ptMould\_1)); //在電腦端觀察指針ptMould\_1占用多少個字節。 View(GtMould\_1.u8Data\_A); //在電腦端觀察結構體成員GtMould\_1.u8Data\_A的最后數值。 while(1) { } } /\*---C語言學習區域的結束。-----------------------------------------------\*/ 在電腦串口助手軟件上觀察到的程序執行現象如下: 開始... 第1個數 十進制:5 十六進制:5 二進制:101 第2個數 十進制:3 十六進制:3 二進制:11 第3個數 十進制:10 十六進制:A 二進制:1010 分析: 變量GtMould\_1占用5個字節。 指針ptMould\_1占用3個字節。 結構體成員GtMould\_1.u8Data\_A的最后數值是10。 【72.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>

                              哎呀哎呀视频在线观看