C語言課件-結(jié)構(gòu)體_第1頁
C語言課件-結(jié)構(gòu)體_第2頁
C語言課件-結(jié)構(gòu)體_第3頁
C語言課件-結(jié)構(gòu)體_第4頁
C語言課件-結(jié)構(gòu)體_第5頁
已閱讀5頁,還剩51頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

12.1結(jié)構(gòu)體結(jié)構(gòu)體是一種構(gòu)造數(shù)據(jù)類型用途:把不同類型的數(shù)據(jù)組合成一個整體------自定義數(shù)據(jù)類型結(jié)構(gòu)體類型定義struct [結(jié)構(gòu)體名]{

類型標識符成員名;類型標識符成員名;

…………….};成員類型可以是基本型或構(gòu)造型struct是關(guān)鍵字,不能省略合法標識符可省:無名結(jié)構(gòu)體第十二章結(jié)構(gòu)體與共同體12.1結(jié)構(gòu)體struct [結(jié)構(gòu)體名]成員類型可以1例

struct

student{int num;charname[20];charsex;intage;floatscore;charaddr[30];};

namenumsexagescoreaddr2字節(jié)2字節(jié)20字節(jié)1字節(jié)4字節(jié)30字節(jié)……..結(jié)構(gòu)體類型定義描述結(jié)構(gòu)的組織形式,不分配內(nèi)存例structstudentnamenumsexag2例structstudent{intnum;charname[20];charsex;intage;floatscore;charaddr[30];};

structstudentstu1,stu2;

12.2結(jié)構(gòu)體變量的定義先定義結(jié)構(gòu)體類型,再定義結(jié)構(gòu)體變量一般形式:struct結(jié)構(gòu)體名{

類型標識符成員名;類型標識符成員名;

…………….};struct結(jié)構(gòu)體名

變量名表列;例#defineSTUDENTstructstudent

STUDENT{intnum;charname[20];charsex;intage;floatscore;charaddr[30];};

STUDENTstu1,stu2;

例structstudent12.2結(jié)構(gòu)體變3定義結(jié)構(gòu)體類型的同時定義結(jié)構(gòu)體變量一般形式:struct結(jié)構(gòu)體名{

類型標識符成員名;類型標識符成員名;

…………….}變量名表列;例struct

student{intnum;charname[20];charsex;intage;floatscore;charaddr[30];}stu1,stu2;

定義結(jié)構(gòu)體類型的同時定義結(jié)構(gòu)體變量struct結(jié)構(gòu)4直接定義結(jié)構(gòu)體變量一般形式:struct{

類型標識符成員名;類型標識符成員名;

…………….}變量名表列;例

struct

{intnum;charname[20];charsex;intage;floatscore;charaddr[30];}stu1,stu2;

用無名結(jié)構(gòu)體直接定義變量只能一次直接定義結(jié)構(gòu)體變量struct例struct用無名512.3結(jié)構(gòu)體變量的引用引用規(guī)則結(jié)構(gòu)體變量不能整體引用,只能引用變量成員結(jié)構(gòu)體嵌套時逐級引用成員(分量)運算符優(yōu)先級:1結(jié)合性:從左向右引用方式:結(jié)構(gòu)體變量名.成員名例

structstudent{intnum;charname[20];charsex;intage;floatscore;charaddr[30];}stu1,stu2;stu1.num=10;stu1.score=85.5;stu1.score+=stu2.score;stu1.age++;例

structstudent{intnum;charname[20];

structdate{intmonth;intday;intyear;}birthday;}stu1,stu2;numnamebirthdaymonthdayyearstu1.birthday.month=12;12.3結(jié)構(gòu)體變量的引用結(jié)構(gòu)體嵌套時逐級引用成員(分量)運612.4結(jié)構(gòu)體變量的初始化形式一:struct結(jié)構(gòu)體名{

類型標識符成員名;類型標識符成員名;

…………….};struct結(jié)構(gòu)體名

結(jié)構(gòu)體變量={初始數(shù)據(jù)};例

structstudent{intnum;charname[20];charsex;intage;charaddr[30];};structstudentstu1={112,“WangLin”,‘M’,19,“200BeijingRoad”};12.4結(jié)構(gòu)體變量的初始化struct結(jié)構(gòu)體名例7形式二:struct結(jié)構(gòu)體名{

類型標識符成員名;類型標識符成員名;

…………….}結(jié)構(gòu)體變量={初始數(shù)據(jù)};例

structstudent{intnum;charname[20];charsex;intage;charaddr[30];}stu1={112,“WangLin”,‘M’,19,“200BeijingRoad”};形式二:struct結(jié)構(gòu)體名例struct8形式三:struct{

類型標識符成員名;類型標識符成員名;

…………….}結(jié)構(gòu)體變量={初始數(shù)據(jù)};例

struct{intnum;charname[20];charsex;intage;charaddr[30];}stu1={112,“WangLin”,‘M’,19,“200BeijingRoad”};形式三:struct例struct912.5結(jié)構(gòu)體數(shù)組結(jié)構(gòu)體數(shù)組的定義三種形式:形式一:

structstudent{intnum;charname[20];charsex;intage;};structstudentstu[2];形式二:

structstudent{intnum;charname[20];charsex;intage;}stu[2];形式三:

struct{intnum;charname[20];charsex;intage;}stu[2];numnamesexagenumnamesexagestu[0]stu[1]25B12.5結(jié)構(gòu)體數(shù)組形式一:形式二:形式三:numnam10結(jié)構(gòu)體數(shù)組初始化順序初始化:structstudent{intnum;charname[20];charsex;intage;};structstudentstu[]={100,“WangLin”,‘M’,20,101,“LiGang”,‘M’,19,110,“LiuYan”,‘F’,19};分行初始化:structstudent{intnum;charname[20];charsex;intage;};structstudentstu[]={{100,“WangLin”,‘M’,20},{101,“LiGang”,‘M’,19},{110,“LiuYan”,‘F’,19}};全部初始化時維數(shù)可省結(jié)構(gòu)體數(shù)組引用引用方式:結(jié)構(gòu)體數(shù)組名[下標].成員名structstudent{intnum;charname[20];charsex;intage;}stu[3];stu[1].age++;strcpy(stu[0].name,”ZhaoDa”);結(jié)構(gòu)體數(shù)組初始化順序初始化:分行初始化:全部初始化時維數(shù)可省11例統(tǒng)計后選人選票structperson{charname[20];intcount;}leader[3]={“Li”,0,“Zhang”,0,“Wang”,0};main(){inti,j;charleader_name[20];

for(i=1;i<=10;i++){scanf("%s",leader_name);

for(j=0;j<3;j++) if(strcmp(leader_name,leader[j].name)==0) leader[j].count++;}for(i=0;i<3;i++)printf("%5s:%d\n",leader[i].name,leader[i].count);}namecountLiZhangWang000例統(tǒng)計后選人選票structpersonnamecou1212.6結(jié)構(gòu)體和指針指向結(jié)構(gòu)體變量的指針定義形式:struct結(jié)構(gòu)體名*結(jié)構(gòu)體指針名;例structstudent*p;使用結(jié)構(gòu)體指針變量引用成員形式存放結(jié)構(gòu)體變量在內(nèi)存的起始地址numnamesexagestupstructstudent{intnum;charname[20];charsex;intage;}stu;structstudent*p=&stu;(*結(jié)構(gòu)體指針名).成員名結(jié)構(gòu)體指針名->成員名結(jié)構(gòu)體變量名.成員名指向運算符優(yōu)先級:1結(jié)合方向:從左向右例指向結(jié)構(gòu)體的指針變量main(){structstudent{longintnum; charname[20]; charsex; floatscore;}stu_1,*p;p=&stu_1;stu_1.num=89101;strcpy(stu_1.name,"LiLin");

p->sex='M';p->score=89.5;printf("\nNo:%ld\nname:%s\nsex:%c\nscore:%f\n",

(*p).num,p->name,stu_1.sex,p->score);}例intn;int*p=&n;

*p=10;n=10structstudentstu1;structstudent*p=&stu1;stu1.num=101;(*p).num=10112.6結(jié)構(gòu)體和指針使用結(jié)構(gòu)體指針變量引用成員形式存放結(jié)構(gòu)13指向結(jié)構(gòu)體數(shù)組的指針例指向結(jié)構(gòu)體數(shù)組的指針structstudent{intnum;charname[20];charsex;intage;}stu[3]={{10101,"LiLin",'M',18},{10102,"ZhangFun",'M',19}, {10104,"WangMin",'F',20}};main(){structstudent*p;for(p=stu;p<stu+3;p++)printf("%d%s%c%d\n",p->num,p->name,p->sex,p->age);}numnamesexagestu[0]pstu[1]stu[2]p+1指向結(jié)構(gòu)體數(shù)組的指針例指向結(jié)構(gòu)體數(shù)組的指針struct14【例】設(shè)有下面的定義

structaa{inti;structaa*n;}w,t,*p=&w;要建立如圖的結(jié)構(gòu)應(yīng)如何用指針完成?

p0w

i

n1NULL

t

i

n解:

p->i=0;p->n=&t;p->n->i=1;p->n->n=NULL;

成員n指向了本結(jié)構(gòu)體類型的變量。這種結(jié)構(gòu)就是鏈表中的節(jié)點。用指針處理鏈表【例】設(shè)有下面的定義p0win1tin解:用指針15fchi12.8共用體構(gòu)造數(shù)據(jù)類型,也叫聯(lián)合體用途:使幾個不同類型的變量共占一段內(nèi)存(相互覆蓋)共用體類型定義定義形式:union共用體名{

類型標識符成員名;類型標識符成員名;

…………….};類型定義不分配內(nèi)存例uniondata

{inti;charch;floatf;};fchi12.8共用體union共用體名類型定義不分16形式一:

uniondata{inti;charch;floatf;}a,b;形式二:

uniondata{inti;charch;floatf;};uniondataa,b,c,*p,d[3];形式三:

union{inti;charch;floatf;}a,b,c;共用體變量的定義fchifchiab共用體變量定義分配內(nèi)存,長度=最長成員所占字節(jié)數(shù)共用體變量任何時刻只有一個成員有效形式一:形式二:形式三:共用體變量的定義fchifchiab17共用體變量引用引用方式:共用體指針名->成員名共用體變量名.成員名(*共用體指針名).成員名uniondata{inti;charch;floatf;};uniondataa,b,c,*p,d[3];a.ia.cha.fp->ip->chp->f(*p).i(*p).ch(*p).fd[0].id[0].chd[0].f共用體變量引用共用體指針名->成員名共用體變量名.成員名(*18例

a.i=1;a.ch=‘a(chǎn)’;printf(“%d”,a.i);(編譯通過,運行結(jié)果不對)

引用規(guī)則不能引用共用體變量,只能引用其成員共用體變量中起作用的成員是最后一次存放的成員例union{inti;charch;floatf;}a;a=1;()

不能在定義共用體變量時初始化例

union{inti;charch;floatf;}a={1,’a’,1.5};()

可以用一個共用體變量為另一個變量賦值例

floatx;union{inti;charch;floatf;}a,b;a.i=1;a.ch=‘a(chǎn)’;a.f=1.5;b=a;()x=a.f;()例a.i=1;引用規(guī)則共用體變量中起作用的成員是最后一19例將一個整數(shù)按字節(jié)輸出0110000101000001低字節(jié)高字節(jié)0100000101100001ch[0]ch[1]運行結(jié)果:i=60501ch0=101,ch1=141ch0=A,ch1=amain(){unionint_char{inti;charch[2];}x;x.i=24897;printf("i=%o\n",x.i);printf("ch0=%o,ch1=%o\nch0=%c,ch1=%c\n", x.ch[0],x.ch[1],x.ch[0],x.ch[1]);}例將一個整數(shù)按字節(jié)輸出0110000101000001低20結(jié)構(gòu)體與共用體區(qū)別:存儲方式不同structnode{charch[2];intk;}a;unionnode{charch[2];intk;}b;achkbchk變量的各成員同時存在任一時刻只有一個成員存在聯(lián)系:兩者可相互嵌套結(jié)構(gòu)體與共用體structnodeunionno2112.9枚舉類型

如果一個變量只有幾種可能的值,可以定義為枚舉類型。所謂“枚舉類型”是指將變量的值一一列舉出來。

枚舉是用標識符表示的整數(shù)常量的集合。1.枚舉類型的定義

enum枚舉類型名{取值表};如:enumweekday{Sun,Mon,Tue,Wed,Thu,Fri,Sat};2.枚舉變量的定義──與結(jié)構(gòu)變量類似(1)間接定義:enumweekdaysworkday;(2)直接定義:enumweekdays{Sun,Mon,Tue,Wed,Thu,Fri,Sat}workday;

枚舉常量是自動設(shè)置值的符號常量。除非指定了起始值,否則枚舉常量的起始值為0,以后的值依次遞增1。12.9枚舉類型 如果一個變量只有幾種可能的值,可以定義為22找出可能的所有取法的算法

n=0

i從red變到blackj從red變到black

k從red變到black

i!=j真假

k!=i和k!=j真假輸出一種取法

n=n+1輸出取法的總數(shù)n找出可能的所有取法的算法n=0i從red變到blackj23打印出每種排列情況的算法

loop由1到3

loop的值123i=>prij=>prik=>pri

pri的值

red

yellow

blue

white

black打印“red”打印“yellow”打印“blue”打印“white”打印“black”打印出每種排列情況的算法loop由1到3loop的值122412.10用typedef定義類型功能:用自定義名字為已有數(shù)據(jù)類型命名類型定義簡單形式:

typedeftype

name;例

typedefintINTEGER;類型定義語句關(guān)鍵字已有數(shù)據(jù)類型名用戶定義的類型名例

typedeffloatREAL;類型定義后,與已有類型一樣使用例

INTEGERa,b,c;REALf1,f2;inta,b,c;floatf1,f2;說明:1.typedef沒有創(chuàng)造新數(shù)據(jù)類型2.typedef是定義類型,不能定義變量3.typedef與define不同

define

typedef預(yù)編譯時處理

編譯時處理簡單字符置換

為已有類型命名

12.10用typedef定義類型例typedef25typedef定義類型步驟按定義變量方法先寫出定義體如

inti;將變量名換成新類型名如

intINTEGER;最前面加typedef如

typedefintINTEGER;用新類型名定義變量如

INTEGERi,j;例定義數(shù)組類型

inta[100];intARRAY[100];

typedefintARRAY[100];

ARRAYa,b,c;

inta[100],b[100],c[100];typedef定義類型步驟例定義數(shù)組類型int26例定義指針類型

char*str;char*STRING;typedefchar*STRING;STRINGp,s[10];char*p;

char*s[10];例定義函數(shù)指針類型

int(*p)();int(*POWER)();typedefint(*POWER)();POWERp1,p2;int(*p1)(),(*p2)();例定義結(jié)構(gòu)體類型

structdate{intmonth;intday;intyear;}d;例定義結(jié)構(gòu)體類型

structdate{intmonth;intday;intyear;}DATE;例定義結(jié)構(gòu)體類型typedefstructdate{intmonth;intday;intyear;}DATE;例定義結(jié)構(gòu)體類型

DATEbirthday,*p;structdate{intmonth;intday;intyear;}birthday,*p;例定義指針類型char*p;例定義函數(shù)指27作業(yè)11.3作業(yè)11.32812.1結(jié)構(gòu)體結(jié)構(gòu)體是一種構(gòu)造數(shù)據(jù)類型用途:把不同類型的數(shù)據(jù)組合成一個整體------自定義數(shù)據(jù)類型結(jié)構(gòu)體類型定義struct [結(jié)構(gòu)體名]{

類型標識符成員名;類型標識符成員名;

…………….};成員類型可以是基本型或構(gòu)造型struct是關(guān)鍵字,不能省略合法標識符可省:無名結(jié)構(gòu)體第十二章結(jié)構(gòu)體與共同體12.1結(jié)構(gòu)體struct [結(jié)構(gòu)體名]成員類型可以29例

struct

student{int num;charname[20];charsex;intage;floatscore;charaddr[30];};

namenumsexagescoreaddr2字節(jié)2字節(jié)20字節(jié)1字節(jié)4字節(jié)30字節(jié)……..結(jié)構(gòu)體類型定義描述結(jié)構(gòu)的組織形式,不分配內(nèi)存例structstudentnamenumsexag30例structstudent{intnum;charname[20];charsex;intage;floatscore;charaddr[30];};

structstudentstu1,stu2;

12.2結(jié)構(gòu)體變量的定義先定義結(jié)構(gòu)體類型,再定義結(jié)構(gòu)體變量一般形式:struct結(jié)構(gòu)體名{

類型標識符成員名;類型標識符成員名;

…………….};struct結(jié)構(gòu)體名

變量名表列;例#defineSTUDENTstructstudent

STUDENT{intnum;charname[20];charsex;intage;floatscore;charaddr[30];};

STUDENTstu1,stu2;

例structstudent12.2結(jié)構(gòu)體變31定義結(jié)構(gòu)體類型的同時定義結(jié)構(gòu)體變量一般形式:struct結(jié)構(gòu)體名{

類型標識符成員名;類型標識符成員名;

…………….}變量名表列;例struct

student{intnum;charname[20];charsex;intage;floatscore;charaddr[30];}stu1,stu2;

定義結(jié)構(gòu)體類型的同時定義結(jié)構(gòu)體變量struct結(jié)構(gòu)32直接定義結(jié)構(gòu)體變量一般形式:struct{

類型標識符成員名;類型標識符成員名;

…………….}變量名表列;例

struct

{intnum;charname[20];charsex;intage;floatscore;charaddr[30];}stu1,stu2;

用無名結(jié)構(gòu)體直接定義變量只能一次直接定義結(jié)構(gòu)體變量struct例struct用無名3312.3結(jié)構(gòu)體變量的引用引用規(guī)則結(jié)構(gòu)體變量不能整體引用,只能引用變量成員結(jié)構(gòu)體嵌套時逐級引用成員(分量)運算符優(yōu)先級:1結(jié)合性:從左向右引用方式:結(jié)構(gòu)體變量名.成員名例

structstudent{intnum;charname[20];charsex;intage;floatscore;charaddr[30];}stu1,stu2;stu1.num=10;stu1.score=85.5;stu1.score+=stu2.score;stu1.age++;例

structstudent{intnum;charname[20];

structdate{intmonth;intday;intyear;}birthday;}stu1,stu2;numnamebirthdaymonthdayyearstu1.birthday.month=12;12.3結(jié)構(gòu)體變量的引用結(jié)構(gòu)體嵌套時逐級引用成員(分量)運3412.4結(jié)構(gòu)體變量的初始化形式一:struct結(jié)構(gòu)體名{

類型標識符成員名;類型標識符成員名;

…………….};struct結(jié)構(gòu)體名

結(jié)構(gòu)體變量={初始數(shù)據(jù)};例

structstudent{intnum;charname[20];charsex;intage;charaddr[30];};structstudentstu1={112,“WangLin”,‘M’,19,“200BeijingRoad”};12.4結(jié)構(gòu)體變量的初始化struct結(jié)構(gòu)體名例35形式二:struct結(jié)構(gòu)體名{

類型標識符成員名;類型標識符成員名;

…………….}結(jié)構(gòu)體變量={初始數(shù)據(jù)};例

structstudent{intnum;charname[20];charsex;intage;charaddr[30];}stu1={112,“WangLin”,‘M’,19,“200BeijingRoad”};形式二:struct結(jié)構(gòu)體名例struct36形式三:struct{

類型標識符成員名;類型標識符成員名;

…………….}結(jié)構(gòu)體變量={初始數(shù)據(jù)};例

struct{intnum;charname[20];charsex;intage;charaddr[30];}stu1={112,“WangLin”,‘M’,19,“200BeijingRoad”};形式三:struct例struct3712.5結(jié)構(gòu)體數(shù)組結(jié)構(gòu)體數(shù)組的定義三種形式:形式一:

structstudent{intnum;charname[20];charsex;intage;};structstudentstu[2];形式二:

structstudent{intnum;charname[20];charsex;intage;}stu[2];形式三:

struct{intnum;charname[20];charsex;intage;}stu[2];numnamesexagenumnamesexagestu[0]stu[1]25B12.5結(jié)構(gòu)體數(shù)組形式一:形式二:形式三:numnam38結(jié)構(gòu)體數(shù)組初始化順序初始化:structstudent{intnum;charname[20];charsex;intage;};structstudentstu[]={100,“WangLin”,‘M’,20,101,“LiGang”,‘M’,19,110,“LiuYan”,‘F’,19};分行初始化:structstudent{intnum;charname[20];charsex;intage;};structstudentstu[]={{100,“WangLin”,‘M’,20},{101,“LiGang”,‘M’,19},{110,“LiuYan”,‘F’,19}};全部初始化時維數(shù)可省結(jié)構(gòu)體數(shù)組引用引用方式:結(jié)構(gòu)體數(shù)組名[下標].成員名structstudent{intnum;charname[20];charsex;intage;}stu[3];stu[1].age++;strcpy(stu[0].name,”ZhaoDa”);結(jié)構(gòu)體數(shù)組初始化順序初始化:分行初始化:全部初始化時維數(shù)可省39例統(tǒng)計后選人選票structperson{charname[20];intcount;}leader[3]={“Li”,0,“Zhang”,0,“Wang”,0};main(){inti,j;charleader_name[20];

for(i=1;i<=10;i++){scanf("%s",leader_name);

for(j=0;j<3;j++) if(strcmp(leader_name,leader[j].name)==0) leader[j].count++;}for(i=0;i<3;i++)printf("%5s:%d\n",leader[i].name,leader[i].count);}namecountLiZhangWang000例統(tǒng)計后選人選票structpersonnamecou4012.6結(jié)構(gòu)體和指針指向結(jié)構(gòu)體變量的指針定義形式:struct結(jié)構(gòu)體名*結(jié)構(gòu)體指針名;例structstudent*p;使用結(jié)構(gòu)體指針變量引用成員形式存放結(jié)構(gòu)體變量在內(nèi)存的起始地址numnamesexagestupstructstudent{intnum;charname[20];charsex;intage;}stu;structstudent*p=&stu;(*結(jié)構(gòu)體指針名).成員名結(jié)構(gòu)體指針名->成員名結(jié)構(gòu)體變量名.成員名指向運算符優(yōu)先級:1結(jié)合方向:從左向右例指向結(jié)構(gòu)體的指針變量main(){structstudent{longintnum; charname[20]; charsex; floatscore;}stu_1,*p;p=&stu_1;stu_1.num=89101;strcpy(stu_1.name,"LiLin");

p->sex='M';p->score=89.5;printf("\nNo:%ld\nname:%s\nsex:%c\nscore:%f\n",

(*p).num,p->name,stu_1.sex,p->score);}例intn;int*p=&n;

*p=10;n=10structstudentstu1;structstudent*p=&stu1;stu1.num=101;(*p).num=10112.6結(jié)構(gòu)體和指針使用結(jié)構(gòu)體指針變量引用成員形式存放結(jié)構(gòu)41指向結(jié)構(gòu)體數(shù)組的指針例指向結(jié)構(gòu)體數(shù)組的指針structstudent{intnum;charname[20];charsex;intage;}stu[3]={{10101,"LiLin",'M',18},{10102,"ZhangFun",'M',19}, {10104,"WangMin",'F',20}};main(){structstudent*p;for(p=stu;p<stu+3;p++)printf("%d%s%c%d\n",p->num,p->name,p->sex,p->age);}numnamesexagestu[0]pstu[1]stu[2]p+1指向結(jié)構(gòu)體數(shù)組的指針例指向結(jié)構(gòu)體數(shù)組的指針struct42【例】設(shè)有下面的定義

structaa{inti;structaa*n;}w,t,*p=&w;要建立如圖的結(jié)構(gòu)應(yīng)如何用指針完成?

p0w

i

n1NULL

t

i

n解:

p->i=0;p->n=&t;p->n->i=1;p->n->n=NULL;

成員n指向了本結(jié)構(gòu)體類型的變量。這種結(jié)構(gòu)就是鏈表中的節(jié)點。用指針處理鏈表【例】設(shè)有下面的定義p0win1tin解:用指針43fchi12.8共用體構(gòu)造數(shù)據(jù)類型,也叫聯(lián)合體用途:使幾個不同類型的變量共占一段內(nèi)存(相互覆蓋)共用體類型定義定義形式:union共用體名{

類型標識符成員名;類型標識符成員名;

…………….};類型定義不分配內(nèi)存例uniondata

{inti;charch;floatf;};fchi12.8共用體union共用體名類型定義不分44形式一:

uniondata{inti;charch;floatf;}a,b;形式二:

uniondata{inti;charch;floatf;};uniondataa,b,c,*p,d[3];形式三:

union{inti;charch;floatf;}a,b,c;共用體變量的定義fchifchiab共用體變量定義分配內(nèi)存,長度=最長成員所占字節(jié)數(shù)共用體變量任何時刻只有一個成員有效形式一:形式二:形式三:共用體變量的定義fchifchiab45共用體變量引用引用方式:共用體指針名->成員名共用體變量名.成員名(*共用體指針名).成員名uniondata{inti;charch;floatf;};uniondataa,b,c,*p,d[3];a.ia.cha.fp->ip->chp->f(*p).i(*p).ch(*p).fd[0].id[0].chd[0].f共用體變量引用共用體指針名->成員名共用體變量名.成員名(*46例

a.i=1;a.ch=‘a(chǎn)’;printf(“%d”,a.i);(編譯通過,運行結(jié)果不對)

引用規(guī)則不能引用共用體變量,只能引用其成員共用體變量中起作用的成員是最后一次存放的成員例union{inti;charch;floatf;}a;a=1;()

不能在定義共用體變量時初始化例

union{inti;charch;floatf;}a={1,’a’,1.5};()

可以用一個共用體變量為另一個變量賦值例

floatx;union{inti;charch;floatf;}a,b;a.i=1;a.ch=‘a(chǎn)’;a.f=1.5;b=a;()x=a.f;()例a.i=1;引用規(guī)則共用體變量中起作用的成員是最后一47例將一個整數(shù)按字節(jié)輸出0110000101000001低字節(jié)高字節(jié)0100000101100001ch[0]ch[1]運行結(jié)果:i=60501ch0=101,ch1=141ch0=A,ch1=amain(){unionint_char{inti;charch[2];}x;x.i=24897;printf("i=%o\n",x.i);printf("ch0=%o,ch1=%o\nch0=%c,ch1=%c\n", x.ch[0],x.ch[1],x.ch[0],x.ch[1]);}例將一個整數(shù)按字節(jié)輸出0110000101000001低48結(jié)構(gòu)體與共用體區(qū)別:存儲方式不同structnode{charch[2];intk;}a;unionnode{charch[2];intk;}b;achkbchk變量的各成員同時存在任一時刻只有一個成員存在聯(lián)系:兩者可相互嵌套結(jié)構(gòu)體與共用體structnodeunionno4912

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論