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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 51單片機之C語言-4.3結(jié)構(gòu)體

          51單片機之C語言-4.3結(jié)構(gòu)體

          作者: 時間:2016-11-21 來源:網(wǎng)絡 收藏
          既然既然相同長度單元格能放在一起,比如char1,char2,char3; int1,int2,int3; long1,long2,long3.在實際使用中,有些變量長度是不一樣的,但由于它們之間相互關聯(lián)也需要放在一起,那么要是不同長度的變量,想放在一起有沒有辦法呢?當然可以,這個就叫做結(jié)構(gòu)體?,F(xiàn)在按照數(shù)組的學習方法來研究結(jié)構(gòu)體,兩個問題,如何定義;如何訪問結(jié)構(gòu)體成員。

          (1) 如何定義一個結(jié)構(gòu)體

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

          定義一個結(jié)構(gòu)的一般形式為:

          struct結(jié)構(gòu)名

          {成員表列};

          成員表列由若干個成員組成,每個成員都是該結(jié)構(gòu)的一個組成部分。對每個成員也必須作類型說明,其形式為:

          類型說明符成員名;

          成員名的命名應符合標志符的書寫規(guī)定。例如:

          struct stu

          {

          int num;

          char name[20];

          char sex;

          float score;

          }

          由以上可見,通過struct來定義一個結(jié)構(gòu)體名,然后描述這個結(jié)構(gòu)體中各個成員。struct stu類似于int或者char.為什么這么講呢?我們來看看char是什么,char就是固定化的存儲空間,一個字節(jié),int就是固定的兩個字節(jié)。我們知道變量是多樣化的,現(xiàn)在我需要的變量既不是int 也不是char,而是int和char的綜合,那怎么辦?這個就是結(jié)構(gòu)體了。簡單的講,int,char是固定好的存儲空間劃分,struct stu是自定義存儲空間劃分。類似于很多軟件中有默認的設置,還有自定義設置。了解這點,我們來看看如何定義結(jié)構(gòu)體變量:

          先來深入了解一下前面我們是怎么定義變量的?比如char mystring, int mydata.這個是先劃分存儲空間然后,再給這個空間命名。比如char先要一個一個字節(jié)的單元格,然后給這個字節(jié)取個名字叫mystring,同樣int就是先要2個字節(jié)的單元格,然后給這兩個字節(jié)取個名字叫mydata. 同樣對于結(jié)構(gòu)體變量,我們先要一個存儲空間,然后給這個空間取個名字。這個存儲空間可以任意由你定義。比如struct stu.然后給這個空間取個名字,比如boy1.因此我們就知道了如何定義一個結(jié)構(gòu)體變量。與其他變量并無區(qū)別。

          struct stu boy1,boy2;等等。這里小結(jié)一下,結(jié)構(gòu)體變量定義一共有三種方法:

          1)先定義結(jié)構(gòu),再說明結(jié)構(gòu)變量

          struct stu

          {

          int num;

          char name[20];

          char sex;

          float score;

          }

          struct stu boy1,boy2;

          2) 在定義結(jié)構(gòu)類型的同時說明結(jié)構(gòu)變量

          struct stu

          {

          int num;

          char name[20];

          char sex;

          float score;

          }boy1,boy2;

          3)直接說明結(jié)構(gòu)變量

          struct

          {

          int num;

          char name[20];

          char sex;

          float score;

          }boy1,boy2;

          第3種方法中省去了結(jié)構(gòu)名。

          (2)結(jié)構(gòu)變量的初始化

          和其他類型變量一樣,對結(jié)構(gòu)變量可以在定義時進行初始化賦值。

          那么結(jié)構(gòu)體的成員能否為數(shù)組?當然可以。我們來看看如何在結(jié)構(gòu)體成員中讓某個成員為數(shù)組

          struct mystruct {

          int age;

          int score;

          char sex;

          char myarry[3];

          };

          struct mystruct boy1;

          void main(void)

          {

          boy1.myarry[0]=4;

          boy1.myarry[1]=2;

          boy1.myarry[2]=3;

          }

          這中方法是通過給數(shù)組的成員一個一個賦值

          (3) 結(jié)構(gòu)體成員的訪問

          那么如何訪問結(jié)構(gòu)體中的成員呢?我們訪問數(shù)組的時候,比如數(shù)組a[4],我要訪問第三個成員,那么直接使用a[2],就可以了。那么訪問結(jié)構(gòu)體成員,使用結(jié)構(gòu)體變量加成員名,比如:

          boy1.num

          boy2.name

          boy1.birthday.month

          與普通變量完全相同。

          #include "reg52.h"

          typedef unsigned char uchar;

          void delayUs(uchar t);

          void delayMs(uchar t);

          void main (void)

          {

          struct MyStruct

          {

          uchar DATA0;

          uchar DATA1;

          uchar DATA2;

          uchar DATA3;

          uchar DATA4;

          uchar DATA5;

          uchar DATA6;

          uchar DATA7;

          };

          struct MyStruct MyData;

          MyData.DATA0=0xfe;//點亮第1個LED

          MyData.DATA1=0xfd;//點亮第2個LED燈

          MyData.DATA2=0xfb;//點亮第3個LED燈

          MyData.DATA3=0xf7;//點亮第4個LED燈

          MyData.DATA4=0xef;//點亮第5個LED燈

          MyData.DATA5=0xdf;//點亮第6個LED燈

          MyData.DATA6=0xbf;//點亮第7個LED燈

          MyData.DATA7=0x7f;//點亮第8個LED燈

          while(1)

          {

          P1=MyData.DATA0;//點亮第1個LED燈

          delayMs(100);

          P1=MyData.DATA1;//點亮第2個LED燈

          delayMs(100);

          P1=MyData.DATA2;//點亮第3個LED燈

          delayMs(100);

          P1=MyData.DATA3;//點亮第4個LED燈

          delayMs(100);

          P1=MyData.DATA4;//點亮第5個LED燈

          delayMs(100);

          P1=MyData.DATA5;//點亮第6個LED燈

          delayMs(100);

          P1=MyData.DATA6;//點亮第7個LED燈

          delayMs(100);

          P1=MyData.DATA7;//點亮第8個LED燈

          delayMs(100);

          }

          }

          void delayUs(uchar t)

          {

          while(--t);

          }

          void delayMs(uchar t)

          {

          while(--t)

          {

          delayUs(245);

          delayUs(245);

          }

          }



          評論


          技術專區(qū)

          關閉
          看屁屁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); })();