亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? 10.學c51的基礎 10《 聯 合(union) 》.txt

?? 學習51單片機必備的一些C語言基礎知識
?? TXT
字號:
=================================================
詳細內容十:學C51的基礎---- 聯合體,結構體(struct) 
=================================================

............................................聯合(union)........................................................
    
    1. 聯合說明和聯合變量定義
    聯合也是一種新的數據類型, 它是一種特殊形式的變量。
    聯合說明和聯合變量定義與結構十分相似。其形式為:
     union 聯合名{
          數據類型 成員名;
          數據類型 成員名;
          ...
     } 聯合變量名;
    聯合表示幾個變量公用一個內存位置, 在不同的時間保存不同的數據類型和不同長度的變量。
    下例表示說明一個聯合a_bc:
     union a_bc{
          int i;
          char mm;
     };
    再用已說明的聯合可定義聯合變量。例如用上面說明的聯合定義一個名為lgc的聯合變量, 可寫成:

      union a_bc lgc;

    在聯合變量lgc中, 整型量i和字符mm公用同一內存位置。
    當一個聯合被說明時, 編譯程序自動地產生一個變量, 其長度為聯合中最大的變量長度。
    聯合訪問其成員的方法與結構相同。同樣聯合變量也可以定義成數組或指針,但定義為指針時, 也要用"->"符號, 此時聯合訪問
成員可表示成:

     聯合名->成員名

    另外, 聯合既可以出現在結構內, 它的成員也可以是結構。
    例如:
     struct{
          int age;
          char *addr;
          union{
               int i;
               char *ch;
          }x;
     }y[10];

    若要訪問結構變量y[1]中聯合x的成員i, 可以寫成:

      y[1].x.i;

    若要訪問結構變量y[2]中聯合x的字符串指針ch的第一個字符可寫成:

      *y[2].x.ch;

    若寫成"y[2].x.*ch;"是錯誤的。

    2. 結構和聯合的區別
    結構和聯合有下列區別:
    1. 結構和聯合都是由多個不同的數據類型成員組成, 但在任何同一時刻, 聯合中只存放了一個被選中的成員, 而結構的所有成
員都存在。
    2. 對于聯合的不同成員賦值, 將會對其它成員重寫, 原來成員的值就不存在了, 而對于結構的不同成員賦值是互不影響的。
    下面舉一個例了來加對深聯合的理解。
    例4:

     main()
     {
          union{                   /*定義一個聯合*/
               int i;
               struct{             /*在聯合中定義一個結構*/
                    char first;
                    char second;
               }half;
          }number;
          number.i=0x4241;         /*聯合成員賦值*/
          printf("%c%c\n", number.half.first, mumber.half.second);
          number.half.first=''a'';   /*聯合中結構成員賦值*/
          number.half.second=''b'';
          printf("%x\n", number.i);
          getch();
     }

    輸出結果為:
     AB
     6261

    從上例結果可以看出: 當給i賦值后, 其低八位也就是first和second的值; 當給first和second賦字符后, 這兩個字符的ASCII
碼也將作為i 的低八位和高八位。
    ............................................結構(struct) ........................................................
                     
    結構是由基本數據類型構成的、并用一個標識符來命名的各種變量的組合。結構中可以使用不同的數據類型。

    1. 結構說明和結構變量定義
    在Turbo C中, 結構也是一種數據類型, 可以使用結構變量, 因此, 象其它類型的變量一樣, 在使用結構變量時要先對其定義。
    定義結構變量的一般格式為:
     struct 結構名
     {
          類型  變量名;
          類型  變量名;
          ...
     } 結構變量;
    結構名是結構的標識符不是變量名。
    類型為第二節中所講述的五種數據類型(整型、浮點型、字符型、指針型和無值型)。
    構成結構的每一個類型變量稱為結構成員, 它象數組的元素一樣, 但數組中元素是以下標來訪問的, 而結構是按變量名字來訪
問成員的。
    下面舉一個例子來說明怎樣定義結構變量。
     struct string
     {
          char name[8];
          int age;
          char sex[2];
          char depart[20];
          float wage1, wage2, wage3, wage4, wage5;
     } person;
    這個例子定義了一個結構名為string的結構變量person, 如果省略變量名person, 則變成對結構的說明。用已說明的結構名也
可定義結構變量。這樣定義時上例變成:
     struct string
     {
          char name[8];
          int age;
          char sex[2];
          char depart[20];
          float wage1, wage2, wage3, wage4, wage5;
     };
     struct string person;
    如果需要定義多個具有相同形式的結構變量時用這種方法比較方便, 它先作結構說明, 再用結構名來定義變量。
    例如:
     struct string Tianyr, Liuqi, ...;
    如果省略結構名, 則稱之為無名結構, 這種情況常常出現在函數內部, 用這種結構時前面的例子變成:
     struct
     {
          char name[8];
          int age;
          char sex[2];
          char depart[20];
          float wage1, wage2, wage3, wage4, wage5;
     } Tianyr, Liuqi;


    2. 結構變量的使用
    結構是一個新的數據類型, 因此結構變量也可以象其它類型的變量一樣賦值、運算, 不同的是結構變量以成員作為基本變量。
    結構成員的表示方式為:
          結構變量.成員名
    如果將"結構變量.成員名"看成一個整體, 則這個整體的數據類型與結構中該成員的數據類型相同, 這樣就可象前面所講的變量
那樣使用。
    下面這個例子定義了一個結構變量, 其中每個成員都從鍵盤接收數據, 然后對結構中的浮點數求和, 并顯示運算結果, 同時將
數據以文本方式存入一個名為wage.dat的磁盤文件中。請注意這個例子中不同結構成員的訪問。
    例3:
     #include < stdio.h >
     main()
     {
          struct{                       /*定義一個結構變量*/
               char name[8];
               int age;
               char sex[2];
               char depart[20];
               float wage1, wage2, wage3, wage4, wage5;
          }a;
          FILE *fp;
          float wage;
          char c=''Y'';
          fp=fopen("wage.dat", "w");    /*創建一個文件只寫*/
          while(c==''Y''||c==''y'')         /*判斷是否繼續循環*/
          {
               printf("\nName:");
               scanf("%s", a.name);     /*輸入姓名*/
               printf("Age:");
               scanf("%d", &a.wage);    /*輸入年齡*/
               printf("Sex:");
               scanf("%d", a.sex);
               printf("Dept:");
               scanf("%s", a.depart);
               printf("Wage1:");
               scanf("%f", &a.wage1);   /*輸入工資*/
               printf("Wage2:");
               scanf("%f", &a.wage2);
               printf("Wage3:");
               scanf("%f", &a.wage3);
               printf("Wage4:");
               scanf("%f", &a.wage4);
               printf("Wage5:");
               scanf("%f", &a.wage5);
               wage=a.wage1+a.wage2+a.wage3+a.wage4+a.wage5;
               printf("The sum of wage is %6.2f\n", wage);      /*顯示結果*/
               fprintf(fp, "%10s%4d%4s%30s%10.2f\n",            /*結果寫入文件*/
                            a.name, a.age, a.sex, a.depart, wage);
               while(1)
               {
                    printf("Continue?");
                    c=getche();
                    if(c==''Y''||c==''y''||c==''N''||c==''n'')
                         break;
               }
          }
          fclose(fp);
     }


    3. 結構數組和結構指針
    結構是一種新的數據類型, 同樣可以有結構數組和結構指針。
    一、結構數組
    結構數組就是具有相同結構類型的變量集合。假如要定義一個班級40個同學的姓名、性別、年齡和住址, 可以定義成一個結構
數組。如下所示:
     struct{
          char name[8];
          char sex[2];
          int age;
          char addr[40];
     }student[40];
    也可定義為:
     struct string{
          char name[8];
          char sex[2];
          int age;
          char addr[40];
     };
     struct string student[40];
    需要指出的是結構數組成員的訪問是以數組元素為結構變量的, 其形式為:
          結構數組元素.成員名
    例如:
      student[0].name
      student[30].age
    實際上結構數組相當于一個二維構造, 第一維是結構數組元素, 每個元素是一個結構變量, 第二維是結構成員。
    注意:
    結構數組的成員也可以是數組變量。
    例如:
     struct a
     {
          int m[3][5];
          float f;
          char s[20];
     }y[4];
    為了訪問結構a中結構變量y[2]的這個變量, 可寫成
       y[2].m[1][4]

    二、結構指針
    結構指針是指向結構的指針。它由一個加在結構變量名前的"*"操作符來定義, 例如用前面已說明的結構定義一個結構指針如下:
     struct string{
          char name[8];
          char sex[2];
          int age;
          char addr[40];
     }*student;
    也可省略結構指針名只作結構說明, 然后再用下面的語句定義結構指針。
      struct string *student;
    使用結構指針對結構成員的訪問, 與結構變量對結構成員的訪問在表達方式上有所不同。結構指針對結構成員的訪問表示為:
       結構指針名->結構成員
    其中"->"是兩個符號"-"和">"的組合, 好象一個箭頭指向結構成員。例如要給上面定義的結構中name和age賦值, 可以用下面語
句:
     strcpy(student->name, "Lu G.C");
     student->age=18;
    實際上, student->name就是(*student).name的縮寫形式。
    需要指出的是結構指針是指向結構的一個指針, 即結構中第一個成員的首地址, 因此在使用之前應該對結構指針初始化, 即分
配整個結構長度的字節空間, 這可用下面函數完成, 仍以上例來說明如下:
     student=(struct string*)malloc(size of (struct string));
    size of (struct string)自動求取string結構的字節長度, malloc() 函數定義了一個大小為結構長度的內存區域, 然后將其
地址作為結構指針返回。

    注意:
    1. 結構作為一種數據類型, 因此定義的結構變量或結構指針變量同樣有局部變量和全程變量, 視定義的位置而定。
    2. 結構變量名不是指向該結構的地址, 這與數組名的含義不同, 因此若需要求結構中第一個成員的首地址應該是&[結構變量
名]。
    4. 結構的復雜形式
    一、嵌套結構
    嵌套結構是指在一個結構成員中可以包括其它一個結構, Turbo C 允許這種嵌套。
    例如: 下面是一個有嵌套的結構
     struct string{
          char name[8];
          int age;
          struct addr address;
     } student;
    其中: addr為另一個結構的結構名, 必須要先進行, 說明, 即
     struct addr{
          char city[20];
          unsigned lon zipcode;
          char tel[14];
     }
    如果要給student結構中成員address結構中的zipcode賦值, 則可寫成:

      student.address.zipcode=200001;

    每個結構成員名從最外層直到最內層逐個被列出, 即嵌套式結構成員的表達方式是:

      結構變量名.嵌套結構變量名.結構成員名

    其中: 嵌套結構可以有很多, 結構成員名為最內層結構中不是結構的成員名。

    二、位結構
    位結構是一種特殊的結構,在需按位訪問一個字節或字的多個位時,位結構比按位運算符更加方便。
    位結構定義的一般形式為:

     struct位結構名{
          數據類型 變量名: 整型常數;
          數據類型 變量名: 整型常數;
     } 位結構變量;

    其中: 數據類型必須是int(unsigned或signed)。 整型常數必須是非負的整數, 范圍是0~15, 表示二進制位的個數, 即表示有
多少位。
    變量名是選擇項, 可以不命名, 這樣規定是為了排列需要。
    例如: 下面定義了一個位結構。

     struct{
          unsigned incon: 8;  /*incon占用低字節的0~7共8位*/
          unsigned txcolor: 4;/*txcolor占用高字節的0~3位共4位*/
          unsigned bgcolor: 3;/*bgcolor占用高字節的4~6位共3位*/
          unsigned blink: 1;  /*blink占用高字節的第7位*/
     }ch;

    位結構成員的訪問與結構成員的訪問相同。
    例如: 訪問上例位結構中的bgcolor成員可寫成:

      ch.bgcolor

    注意:
    1. 位結構中的成員可以定義為unsigned, 也可定義為signed, 但當成員長度為1時, 會被認為是unsigned類型。因為單個位不
可能具有符號。
    2. 位結構中的成員不能使用數組和指針, 但位結構變量可以是數組和指針, 如果是指針, 其成員訪問方式同結構指針。
    3. 位結構總長度(位數), 是各個位成員定義的位數之和,  可以超過兩個字節。
    4. 位結構成員可以與其它結構成員一起使用。
    例如:

     struct info{
          char name[8];
          int age;
          struct addr address;
          float pay;
          unsigned state: 1;
          unsigned pay: 1;
          }workers;''

    上例的結構定義了關于一個工從的信息。其中有兩個位結構成員, 每個位結構成員只有一位, 因此只占一個字節但保存了兩個
信息, 該字節中第一位表示工人的狀態, 第二位表示工資是否已發放。由此可見使用位結構可以節省存貯空間。 



 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩精品欧美日韩精品一| 亚洲超碰精品一区二区| 欧美一区二区黄色| 欧美美女一区二区三区| 精品视频一区三区九区| 欧美精品日韩精品| 制服丝袜一区二区三区| 69p69国产精品| 精品免费99久久| 久久久久一区二区三区四区| 国产午夜精品一区二区三区四区| 久久色.com| 国产精品电影一区二区| 激情久久五月天| 国产日韩三级在线| 99国产精品国产精品久久| 成人在线视频一区| 色系网站成人免费| 欧美精品色一区二区三区| 日韩欧美国产综合一区 | 中文字幕免费在线观看视频一区| 国产亚洲福利社区一区| 国产精品久久久久影院| 一区二区三国产精华液| 秋霞电影网一区二区| 国产激情91久久精品导航| 成人一区在线看| 精品视频色一区| 国产婷婷精品av在线| 国产精品久久久久久久久久久免费看| 亚洲男人的天堂av| 人人爽香蕉精品| 国产69精品一区二区亚洲孕妇| 91色视频在线| 欧美不卡一区二区三区| 中文字幕视频一区| 精品一区二区三区久久久| www.色精品| 日韩精品一区二区三区视频| 中文字幕制服丝袜成人av| 三级欧美在线一区| 成人激情午夜影院| 这里只有精品视频在线观看| 国产精品久久久久婷婷二区次| 一区二区三区四区高清精品免费观看 | 7777精品伊人久久久大香线蕉完整版| 精品国产免费一区二区三区四区| 亚洲视频免费看| 国产乱人伦偷精品视频不卡| 欧美中文字幕亚洲一区二区va在线| 久久亚洲一级片| 日本va欧美va精品发布| 91麻豆国产精品久久| 国产三级精品视频| 免费看日韩a级影片| 欧美优质美女网站| 国产精品视频一二三区| 国内精品伊人久久久久影院对白| 在线视频你懂得一区| 国产精品卡一卡二卡三| 国产在线视频不卡二| 日韩视频一区在线观看| 亚洲最大成人网4388xx| 一本一道久久a久久精品综合蜜臀 一本一道综合狠狠老 | 91精品国产欧美一区二区18| 日韩毛片高清在线播放| yourporn久久国产精品| 久久精品亚洲精品国产欧美kt∨ | 精品国产成人系列| 手机精品视频在线观看| 欧美精品tushy高清| 亚洲自拍偷拍av| 日本丶国产丶欧美色综合| 国产精品久99| 99视频国产精品| 国产精品久久久久久久久久久免费看 | 91精品国产aⅴ一区二区| 一区二区三区精品视频| 色婷婷av一区二区三区之一色屋| 中文字幕一区二区三区不卡| k8久久久一区二区三区 | 亚洲国产精品久久不卡毛片| 日本久久电影网| 亚洲综合色丁香婷婷六月图片| 91蜜桃传媒精品久久久一区二区| 18欧美亚洲精品| 99久久99久久精品免费观看 | 日韩成人午夜精品| 欧美一卡二卡三卡四卡| 韩国精品主播一区二区在线观看| 精品国产一区二区三区av性色| 久久国产三级精品| 亚洲国产精品成人综合| 91麻豆免费观看| 日韩成人一级大片| 久久久久久亚洲综合影院红桃 | 欧美视频一区在线观看| 婷婷久久综合九色综合伊人色| 欧美一级片在线看| 国产乱妇无码大片在线观看| 国产精品国产三级国产普通话蜜臀| 99久久精品国产麻豆演员表| 亚洲国产日日夜夜| 欧美成人r级一区二区三区| 国产不卡视频一区| 亚洲卡通动漫在线| 日韩视频中午一区| 99久久精品免费看| 美女mm1313爽爽久久久蜜臀| 国产精品免费看片| 欧美老肥妇做.爰bbww| 国产乱码字幕精品高清av| 一区二区三区欧美视频| 欧美xfplay| 91电影在线观看| 国内偷窥港台综合视频在线播放| 亚洲美女一区二区三区| 精品裸体舞一区二区三区| 97se狠狠狠综合亚洲狠狠| 久久疯狂做爰流白浆xx| 樱桃视频在线观看一区| 国产亚洲人成网站| 51精品视频一区二区三区| 成人av在线一区二区三区| 日本中文字幕一区二区视频| 国产精品的网站| 精品国产污网站| 7777精品伊人久久久大香线蕉| 成人18精品视频| 国产激情91久久精品导航| 午夜在线电影亚洲一区| 亚洲精品国产一区二区三区四区在线| 精品国产一区二区三区av性色| 欧美丝袜丝交足nylons| 97se亚洲国产综合自在线 | 97久久精品人人做人人爽| 日韩电影免费在线观看网站| av不卡在线观看| 国产精品久久久一本精品| 91国偷自产一区二区开放时间| 在线观看一区不卡| 久久97超碰色| 亚洲一区二区三区视频在线播放| 国产区在线观看成人精品 | 亚洲色图欧洲色图婷婷| 久久久美女毛片| 日韩免费一区二区| 日韩一级精品视频在线观看| 欧美肥妇bbw| 欧美精品精品一区| 宅男噜噜噜66一区二区66| 欧美色中文字幕| 欧美日韩国产免费| 欧美人与性动xxxx| 91精品国产入口| 日韩一级大片在线观看| 国产亚洲欧美一级| 欧美极品美女视频| 中文字幕日韩精品一区| 中文字幕在线一区| 亚洲人成亚洲人成在线观看图片 | 性做久久久久久久久| 亚洲午夜私人影院| 婷婷综合久久一区二区三区| 午夜精品爽啪视频| 伦理电影国产精品| 韩国视频一区二区| 成人国产精品免费网站| 91毛片在线观看| 欧美三区免费完整视频在线观看| 欧美美女黄视频| 精品久久久久久久久久久久包黑料 | 国产精品白丝jk白祙喷水网站| 国产麻豆精品在线观看| 成人永久免费视频| 在线免费av一区| 日韩午夜激情av| 国产丝袜在线精品| 亚洲精品亚洲人成人网| 天天综合色天天| 国产精品原创巨作av| 91色porny在线视频| 欧美一区二区三区日韩视频| 久久婷婷成人综合色| 一区二区三区日韩在线观看| 男人的天堂久久精品| 国产成人免费视频网站高清观看视频| av成人动漫在线观看| 日韩欧美在线网站| 国产精品美女久久福利网站| 亚洲高清免费观看| 国产91清纯白嫩初高中在线观看 | 男女男精品视频| 成人看片黄a免费看在线| 欧美视频日韩视频| 国产欧美一区二区在线| 五月天婷婷综合| 97精品国产露脸对白| 精品日韩在线观看| 一个色妞综合视频在线观看|