C語言課件-第10講_第1頁
C語言課件-第10講_第2頁
C語言課件-第10講_第3頁
C語言課件-第10講_第4頁
C語言課件-第10講_第5頁
已閱讀5頁,還剩61頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第十講Begin:第十章結(jié)構(gòu)體和共用體結(jié)構(gòu)體類型的定義結(jié)構(gòu)體類型變量的定義結(jié)構(gòu)體類型變量的初始化和引用結(jié)構(gòu)體數(shù)組第十講Begin:第十章結(jié)構(gòu)體和共用體結(jié)構(gòu)體類型的9.1結(jié)構(gòu)體

結(jié)構(gòu)體是數(shù)目固定、類型不同的若干變量(成員)的有序集合,在內(nèi)存中占據(jù)一段連續(xù)的存儲空間。在程序中使用結(jié)構(gòu)體,必須先做兩項工作:1)定義結(jié)構(gòu)體類型:描述該結(jié)構(gòu)體的成員名稱、成員類型;2)定義結(jié)構(gòu)體變量:根據(jù)結(jié)構(gòu)體類型為定義的結(jié)構(gòu)體變量分配存儲空間。9.1結(jié)構(gòu)體結(jié)構(gòu)體是數(shù)目固定、類型不同的若干變量(成員)9.1.1結(jié)構(gòu)體類型的定義

結(jié)構(gòu)體類型定義的一般格式為:struct結(jié)構(gòu)體名{類型名1成員名1;類型名2成員名2;······ 類型名n成員名n;};9.1.1結(jié)構(gòu)體類型的定義結(jié)構(gòu)體類型定義的一般格式為:9.1.1結(jié)構(gòu)體類型的定義

結(jié)構(gòu)體類型定義的格式說明:struct:關(guān)鍵字,是定義結(jié)構(gòu)體類型的標志。結(jié)構(gòu)體名:標識符,其命名規(guī)則同變量名。struct結(jié)構(gòu)體名:結(jié)構(gòu)體類型名,作用等同于int、float等關(guān)鍵字,用于定義結(jié)構(gòu)體變量。類型名1~n:說明了結(jié)構(gòu)體成員的數(shù)據(jù)類型。成員名1~n:用戶定義的一個或多個結(jié)構(gòu)體成員的名稱,其命名規(guī)則同變量名。多個同類型的成員彼此間用逗號分隔。9.1.1結(jié)構(gòu)體類型的定義結(jié)構(gòu)體類型定義的格式說明:9.1.1結(jié)構(gòu)體類型的定義

結(jié)構(gòu)體類型定義舉例:struct_Student{charid[10];/*學號*/ charname[10];/*姓名*/ intscore[3]; /*成績*/ intsum;/*總分*/};9.1.1結(jié)構(gòu)體類型的定義結(jié)構(gòu)體類型定義舉例:9.1.2結(jié)構(gòu)體類型變量的定義

結(jié)構(gòu)體類型的定義只是指出了該結(jié)構(gòu)體的組成情況,系統(tǒng)并不會為它分配實際的存儲單元。應在定義了結(jié)構(gòu)體類型以后,再定義該結(jié)構(gòu)體類型的變量(簡稱結(jié)構(gòu)體變量),以便在結(jié)構(gòu)體變量中存放具體的數(shù)據(jù)。結(jié)構(gòu)體變量的定義方式有三種:先定義結(jié)構(gòu)體類型,再定義結(jié)構(gòu)體變量。在定義結(jié)構(gòu)體類型的同時定義結(jié)構(gòu)體變量。直接定義結(jié)構(gòu)體變量。9.1.2結(jié)構(gòu)體類型變量的定義結(jié)構(gòu)體類型的定義只是指出了9.1.2結(jié)構(gòu)體類型變量的定義

方式一:若事先已定義了結(jié)構(gòu)體類型,那么直接用下面的格式定義結(jié)構(gòu)體變量:

結(jié)構(gòu)體類型名結(jié)構(gòu)體變量名;例如:struct_Studentstu1,stu2;stu1和stu2的存儲形式為:sumscore[2]…score[0]name[9]…name[0]id[9]…id[0]10字節(jié)10字節(jié)6字節(jié)2字節(jié)9.1.2結(jié)構(gòu)體類型變量的定義方式一:sumscore[9.1.2結(jié)構(gòu)體類型變量的定義

方式二:在定義結(jié)構(gòu)體類型的同時定義結(jié)構(gòu)體變量。定義格式為:

struct結(jié)構(gòu)體名{類型名1成員名1;類型名2成員名2;······ 類型名n成員名n;}結(jié)構(gòu)體變量名表;9.1.2結(jié)構(gòu)體類型變量的定義方式二:9.1.2結(jié)構(gòu)體類型變量的定義

例如:struct_Student{charid[10]; charname[10]; intscore[3]; intsum;}stu1,stu2;9.1.2結(jié)構(gòu)體類型變量的定義例如:9.1.2結(jié)構(gòu)體類型變量的定義

方式三:在定義結(jié)構(gòu)體類型時可以直接定義結(jié)構(gòu)體變量。定義格式為:

struct{類型名1成員名1;類型名2成員名2;······ 類型名n成員名n;}結(jié)構(gòu)體變量名表;9.1.2結(jié)構(gòu)體類型變量的定義方式三:9.1.2結(jié)構(gòu)體類型變量的定義

例如:struct{charid[10]; charname[10]; intscore[3]; intsum;}stu1,stu2;9.1.2結(jié)構(gòu)體類型變量的定義例如:9.1.2結(jié)構(gòu)體類型變量的定義

關(guān)于結(jié)構(gòu)體的說明:

類型與變量是不同的概念,應注意區(qū)分。系統(tǒng)可以對變量賦值、存取、運算,而類型則不能。編譯時,系統(tǒng)只為變量分配存儲單元,而類型則不分配。結(jié)構(gòu)體中的成員也可以是一個結(jié)構(gòu)體變量,即結(jié)構(gòu)體的嵌套。結(jié)構(gòu)體中的成員可以和程序中的變量同名,不同結(jié)構(gòu)體中的成員也可以同名。9.1.2結(jié)構(gòu)體類型變量的定義關(guān)于結(jié)構(gòu)體的說明:9.1.2結(jié)構(gòu)體類型變量的定義

例如:structdate{intyear,month,day;};struct_Student2{charid[10];charname[10];

structdatebirth;/*birth為結(jié)構(gòu)體成員*/

intscore[3]; intsum;}stu1,stu2;9.1.2結(jié)構(gòu)體類型變量的定義例如:9.1.2結(jié)構(gòu)體類型變量的定義

關(guān)于結(jié)構(gòu)體的說明:

可以使用typedef關(guān)鍵字為結(jié)構(gòu)體類型定義一個別名。例如:typedef

struct_Student{ charid[10]; charname[10]; intscore[3]; intsum; }

Student;9.1.2結(jié)構(gòu)體類型變量的定義關(guān)于結(jié)構(gòu)體的說明:9.1.2結(jié)構(gòu)體類型變量的定義

以后就可以用Student代替結(jié)構(gòu)體類型名來定義結(jié)構(gòu)體變量了。例如:Studentstu1,stu2;等價于:

struct_Studentstu1,stu2;9.1.2結(jié)構(gòu)體類型變量的定義以后就可以用Student9.1.3結(jié)構(gòu)體類型變量的初始化和引用

結(jié)構(gòu)體變量的初始化類似于對數(shù)組的初始化,由于結(jié)構(gòu)體變量的成員可以有不同的數(shù)據(jù)類型,所以各個初值必須與相應成員保持類型一致或兼容。例1:struct_Student{charid[10]; charname[10]; intscore[3]; intsum;}stu1={"20050001","胡樹偉",87,71,81};9.1.3結(jié)構(gòu)體類型變量的初始化和引用結(jié)構(gòu)體變量的初始化9.1.3結(jié)構(gòu)體類型變量的初始化和引用

例2:structdate{intyear,month,day;};struct_Student2{charid[10];charname[10];

structdatebirth;

intscore[3]; intsum;}stu2={"20050002","李冬",1987,5,3,75,85,76};9.1.3結(jié)構(gòu)體類型變量的初始化和引用例2:9.1.3結(jié)構(gòu)體類型變量的初始化和引用

對結(jié)構(gòu)體變量初始化的說明:對結(jié)構(gòu)體變量進行初始化時,系統(tǒng)是按每個成員在結(jié)構(gòu)體變量中的順序一一對應賦初值的。若只對部分成員進行初始化,則只能給前面的若干成員賦值,而不允許跳過前面的成員給后面的成員賦值。例如:前面兩例中結(jié)構(gòu)體變量stu1和stu2的成員sum沒有獲得指定初值,而是獲得默認初值0。9.1.3結(jié)構(gòu)體類型變量的初始化和引用對結(jié)構(gòu)體變量初始化9.1.3結(jié)構(gòu)體類型變量的初始化和引用

引用結(jié)構(gòu)體變量的一般方式為:結(jié)構(gòu)體變量名?成員名其中:"?"為結(jié)構(gòu)體成員運算符,1級運算符。例如:stu1.sum表示對結(jié)構(gòu)體變量stu1中的sum成員進行引用。9.1.3結(jié)構(gòu)體類型變量的初始化和引用引用結(jié)構(gòu)體變量的一9.1.3結(jié)構(gòu)體類型變量的初始化和引用

結(jié)構(gòu)體變量的引用規(guī)則:不能將結(jié)構(gòu)體變量作為一個整體進行輸入和輸出。例如:struct_Student3{longnum;intage;charsex;}st;下面的寫法是錯誤的:scanf("%ld%d%c",&st);printf("%ld,%d,%c",st);下面的寫法是正確的:scanf("%ld%d%c",&st.num,&st.age,&st.sex);printf("%ld,%d,%c",st.num,st.age,st.sex);9.1.3結(jié)構(gòu)體類型變量的初始化和引用結(jié)構(gòu)體變量的引用規(guī)9.1.3結(jié)構(gòu)體類型變量的初始化和引用

結(jié)構(gòu)體變量的引用規(guī)則:內(nèi)嵌結(jié)構(gòu)體成員的引用,必須逐層使用成員名定位,找到最底層的成員。例如:

structdate{intyear,month,day;};struct_Student2{charid[10],name[10];structdatebirth;

intscore[3],sum;}stu2={"20050002","李冬",1987,5,3,75,85,76};printf("birthday=%d,%d,%d\n",stu2.birth.year,

stu2.birth.month,stu2.birth.day);9.1.3結(jié)構(gòu)體類型變量的初始化和引用結(jié)構(gòu)體變量的引用規(guī)9.1.3結(jié)構(gòu)體類型變量的初始化和引用

結(jié)構(gòu)體變量的引用規(guī)則:若結(jié)構(gòu)體的成員是字符數(shù)組,可對其進行直接引用。例如:struct_Student{charid[10];charname[10];intscore[3];intsum;}stu1;scanf("%s%s",stu1.id,);printf("id=%s,name=%s",stu1.id,);9.1.3結(jié)構(gòu)體類型變量的初始化和引用結(jié)構(gòu)體變量的引用規(guī)9.1.3結(jié)構(gòu)體類型變量的初始化和引用

結(jié)構(gòu)體變量的引用規(guī)則:若結(jié)構(gòu)體的成員是數(shù)值型數(shù)組,則應逐個引用數(shù)組中的元素。例如:struct_Student{charid[10];charname[10];intscore[3];intsum;}stu1;scanf("%d%d%d",&stu1.score[0],&stu1.score[1],&stu1.score[2]);printf("Math=%d,English=%d,Computer=%d",stu1.score[0],stu1.score[1],stu1.score[2]);9.1.3結(jié)構(gòu)體類型變量的初始化和引用結(jié)構(gòu)體變量的引用規(guī)9.1.3結(jié)構(gòu)體類型變量的初始化和引用

例結(jié)構(gòu)體變量的輸入和輸出typedefstruct_Student{charid[10],name[10];intscore[3],sum;}Student;/*定義結(jié)構(gòu)體類型別名*/voidmain(){Studentstu1,stu2;/*定義結(jié)構(gòu)體變量*/scanf("%s%s%d%d%d",stu1.id,,&stu1.score[0],&stu1.score[1],&stu1.score[2]);stu1.sum=stu1.score[0]+stu1.score[1]+stu1.score[2];stu2=stu1;printf("%s,%s,%d,%d,%d,%d",stu2.id,,stu2.score[0],stu1.score[1],stu1.score[2],stu2.sum);}9.1.3結(jié)構(gòu)體類型變量的初始化和引用例結(jié)構(gòu)體變量的9.1.4結(jié)構(gòu)體數(shù)組

結(jié)構(gòu)體數(shù)組的每個數(shù)組元素都是一個結(jié)構(gòu)體變量,它們都分別包括各個成員項。結(jié)構(gòu)體數(shù)組的定義和定義結(jié)構(gòu)體變量的方法相似,只需說明其為數(shù)組即可。例1:struct_Student{charid[10],name[10];intscore[3],sum;};struct_Studentstu[50];9.1.4結(jié)構(gòu)體數(shù)組結(jié)構(gòu)體數(shù)組的每個數(shù)組元素都是一個結(jié)構(gòu)9.1.4結(jié)構(gòu)體數(shù)組

例2:struct_Student{charid[10],name[10];intscore[3],sum;}stu[50];例3:struct{charid[10],name[10];intscore[3],sum;}stu[50];9.1.4結(jié)構(gòu)體數(shù)組例2:struct_Stude9.1.4結(jié)構(gòu)體數(shù)組

結(jié)構(gòu)體數(shù)組的初始化結(jié)構(gòu)體數(shù)組的初始化與普通數(shù)組的初始化相似。例如:struct_Student{charid[10],name[10];intscore[3],sum;};struct_Studentstu[3]={{"20050001",

"胡樹偉",87,71,81},{"20050002","李冬",75,85,76},{"20050003","梁若嬋",86,75,90}};9.1.4結(jié)構(gòu)體數(shù)組結(jié)構(gòu)體數(shù)組的初始化9.1.4結(jié)構(gòu)體數(shù)組

結(jié)構(gòu)體數(shù)組的引用結(jié)構(gòu)體數(shù)組的引用與結(jié)構(gòu)體變量的引用相似。

例結(jié)構(gòu)體數(shù)組的引用

typedefstruct_Student{charid[10];charname[10];intscore[3];intsum;}Student;/*定義結(jié)構(gòu)體類型別名*/9.1.4結(jié)構(gòu)體數(shù)組結(jié)構(gòu)體數(shù)組的引用9.1.4結(jié)構(gòu)體數(shù)組

voidmain(){inti,j;Studentstu[50];/*定義結(jié)構(gòu)體數(shù)組*/for(i=0;i<50;i++){scanf("%s%s%d%d%d",stu[i].id,stu[i].name,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2]);for(stu[i].sum=0,j=0;j<3;j++)stu[i].sum+=stu[i].score[j];}for(i=0;i<50;i++)printf("%s,%s,%d,%d,%d,%d\n",stu[i].id,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].sum);}9.1.4結(jié)構(gòu)體數(shù)組voidmain()9.1.4*結(jié)構(gòu)體數(shù)組名作為函數(shù)參數(shù)

結(jié)構(gòu)體數(shù)組名作為函數(shù)參數(shù)與普通數(shù)組名作為函數(shù)參數(shù)相似,傳遞的也是數(shù)組的首地址。

例結(jié)構(gòu)體數(shù)組名作為函數(shù)參數(shù)

typedefstruct_Student{charid[10];charname[10];intscore[3];intsum;}Student;/*定義結(jié)構(gòu)體類型別名*/voidsort(Studentstu[],int);/*函數(shù)原型聲明*/9.1.4*結(jié)構(gòu)體數(shù)組名作為函數(shù)參數(shù)結(jié)構(gòu)體數(shù)組名作為函數(shù)9.1.4*結(jié)構(gòu)體數(shù)組名作為函數(shù)參數(shù)

voidmain(){inti,j;Studentstu[50];/*定義結(jié)構(gòu)體數(shù)組*/for(i=0;i<50;i++){scanf("%s%s%d%d%d",stu[i].id,stu[i].name,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2]);for(stu[i].sum=0,j=0;j<3;j++)stu[i].sum+=stu[i].score[j];}

sort(stu,50);for(i=0;i<50;i++)printf("%s,%s,%d,%d,%d,%d\n",stu[i].id,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].sum);}9.1.4*結(jié)構(gòu)體數(shù)組名作為函數(shù)參數(shù)voidmain(9.1.4*結(jié)構(gòu)體數(shù)組名作為函數(shù)參數(shù)

voidsort(Studentstu[],intcount){inti,j;Studentt;for(i=1;i<=count-1;i++)for(j=1;j<=count-i;j++)if(stu[j-1].sum<stu[j].sum) { t=stu[j-1]; stu[j-1]=stu[j]; stu[j]=t; }}9.1.4*結(jié)構(gòu)體數(shù)組名作為函數(shù)參數(shù)voidsort(TheEnd上機實驗內(nèi)容:(1)熟悉結(jié)構(gòu)體類型和結(jié)構(gòu)體變量的定義和引用(2)熟悉結(jié)構(gòu)體數(shù)組的定義和引用(3)《實驗教程》第九章結(jié)構(gòu)體和共用體

實驗一(1)(2)TheEnd上機實驗內(nèi)容:第十講Begin:第十章結(jié)構(gòu)體和共用體結(jié)構(gòu)體類型的定義結(jié)構(gòu)體類型變量的定義結(jié)構(gòu)體類型變量的初始化和引用結(jié)構(gòu)體數(shù)組第十講Begin:第十章結(jié)構(gòu)體和共用體結(jié)構(gòu)體類型的9.1結(jié)構(gòu)體

結(jié)構(gòu)體是數(shù)目固定、類型不同的若干變量(成員)的有序集合,在內(nèi)存中占據(jù)一段連續(xù)的存儲空間。在程序中使用結(jié)構(gòu)體,必須先做兩項工作:1)定義結(jié)構(gòu)體類型:描述該結(jié)構(gòu)體的成員名稱、成員類型;2)定義結(jié)構(gòu)體變量:根據(jù)結(jié)構(gòu)體類型為定義的結(jié)構(gòu)體變量分配存儲空間。9.1結(jié)構(gòu)體結(jié)構(gòu)體是數(shù)目固定、類型不同的若干變量(成員)9.1.1結(jié)構(gòu)體類型的定義

結(jié)構(gòu)體類型定義的一般格式為:struct結(jié)構(gòu)體名{類型名1成員名1;類型名2成員名2;······ 類型名n成員名n;};9.1.1結(jié)構(gòu)體類型的定義結(jié)構(gòu)體類型定義的一般格式為:9.1.1結(jié)構(gòu)體類型的定義

結(jié)構(gòu)體類型定義的格式說明:struct:關(guān)鍵字,是定義結(jié)構(gòu)體類型的標志。結(jié)構(gòu)體名:標識符,其命名規(guī)則同變量名。struct結(jié)構(gòu)體名:結(jié)構(gòu)體類型名,作用等同于int、float等關(guān)鍵字,用于定義結(jié)構(gòu)體變量。類型名1~n:說明了結(jié)構(gòu)體成員的數(shù)據(jù)類型。成員名1~n:用戶定義的一個或多個結(jié)構(gòu)體成員的名稱,其命名規(guī)則同變量名。多個同類型的成員彼此間用逗號分隔。9.1.1結(jié)構(gòu)體類型的定義結(jié)構(gòu)體類型定義的格式說明:9.1.1結(jié)構(gòu)體類型的定義

結(jié)構(gòu)體類型定義舉例:struct_Student{charid[10];/*學號*/ charname[10];/*姓名*/ intscore[3]; /*成績*/ intsum;/*總分*/};9.1.1結(jié)構(gòu)體類型的定義結(jié)構(gòu)體類型定義舉例:9.1.2結(jié)構(gòu)體類型變量的定義

結(jié)構(gòu)體類型的定義只是指出了該結(jié)構(gòu)體的組成情況,系統(tǒng)并不會為它分配實際的存儲單元。應在定義了結(jié)構(gòu)體類型以后,再定義該結(jié)構(gòu)體類型的變量(簡稱結(jié)構(gòu)體變量),以便在結(jié)構(gòu)體變量中存放具體的數(shù)據(jù)。結(jié)構(gòu)體變量的定義方式有三種:先定義結(jié)構(gòu)體類型,再定義結(jié)構(gòu)體變量。在定義結(jié)構(gòu)體類型的同時定義結(jié)構(gòu)體變量。直接定義結(jié)構(gòu)體變量。9.1.2結(jié)構(gòu)體類型變量的定義結(jié)構(gòu)體類型的定義只是指出了9.1.2結(jié)構(gòu)體類型變量的定義

方式一:若事先已定義了結(jié)構(gòu)體類型,那么直接用下面的格式定義結(jié)構(gòu)體變量:

結(jié)構(gòu)體類型名結(jié)構(gòu)體變量名;例如:struct_Studentstu1,stu2;stu1和stu2的存儲形式為:sumscore[2]…score[0]name[9]…name[0]id[9]…id[0]10字節(jié)10字節(jié)6字節(jié)2字節(jié)9.1.2結(jié)構(gòu)體類型變量的定義方式一:sumscore[9.1.2結(jié)構(gòu)體類型變量的定義

方式二:在定義結(jié)構(gòu)體類型的同時定義結(jié)構(gòu)體變量。定義格式為:

struct結(jié)構(gòu)體名{類型名1成員名1;類型名2成員名2;······ 類型名n成員名n;}結(jié)構(gòu)體變量名表;9.1.2結(jié)構(gòu)體類型變量的定義方式二:9.1.2結(jié)構(gòu)體類型變量的定義

例如:struct_Student{charid[10]; charname[10]; intscore[3]; intsum;}stu1,stu2;9.1.2結(jié)構(gòu)體類型變量的定義例如:9.1.2結(jié)構(gòu)體類型變量的定義

方式三:在定義結(jié)構(gòu)體類型時可以直接定義結(jié)構(gòu)體變量。定義格式為:

struct{類型名1成員名1;類型名2成員名2;······ 類型名n成員名n;}結(jié)構(gòu)體變量名表;9.1.2結(jié)構(gòu)體類型變量的定義方式三:9.1.2結(jié)構(gòu)體類型變量的定義

例如:struct{charid[10]; charname[10]; intscore[3]; intsum;}stu1,stu2;9.1.2結(jié)構(gòu)體類型變量的定義例如:9.1.2結(jié)構(gòu)體類型變量的定義

關(guān)于結(jié)構(gòu)體的說明:

類型與變量是不同的概念,應注意區(qū)分。系統(tǒng)可以對變量賦值、存取、運算,而類型則不能。編譯時,系統(tǒng)只為變量分配存儲單元,而類型則不分配。結(jié)構(gòu)體中的成員也可以是一個結(jié)構(gòu)體變量,即結(jié)構(gòu)體的嵌套。結(jié)構(gòu)體中的成員可以和程序中的變量同名,不同結(jié)構(gòu)體中的成員也可以同名。9.1.2結(jié)構(gòu)體類型變量的定義關(guān)于結(jié)構(gòu)體的說明:9.1.2結(jié)構(gòu)體類型變量的定義

例如:structdate{intyear,month,day;};struct_Student2{charid[10];charname[10];

structdatebirth;/*birth為結(jié)構(gòu)體成員*/

intscore[3]; intsum;}stu1,stu2;9.1.2結(jié)構(gòu)體類型變量的定義例如:9.1.2結(jié)構(gòu)體類型變量的定義

關(guān)于結(jié)構(gòu)體的說明:

可以使用typedef關(guān)鍵字為結(jié)構(gòu)體類型定義一個別名。例如:typedef

struct_Student{ charid[10]; charname[10]; intscore[3]; intsum; }

Student;9.1.2結(jié)構(gòu)體類型變量的定義關(guān)于結(jié)構(gòu)體的說明:9.1.2結(jié)構(gòu)體類型變量的定義

以后就可以用Student代替結(jié)構(gòu)體類型名來定義結(jié)構(gòu)體變量了。例如:Studentstu1,stu2;等價于:

struct_Studentstu1,stu2;9.1.2結(jié)構(gòu)體類型變量的定義以后就可以用Student9.1.3結(jié)構(gòu)體類型變量的初始化和引用

結(jié)構(gòu)體變量的初始化類似于對數(shù)組的初始化,由于結(jié)構(gòu)體變量的成員可以有不同的數(shù)據(jù)類型,所以各個初值必須與相應成員保持類型一致或兼容。例1:struct_Student{charid[10]; charname[10]; intscore[3]; intsum;}stu1={"20050001","胡樹偉",87,71,81};9.1.3結(jié)構(gòu)體類型變量的初始化和引用結(jié)構(gòu)體變量的初始化9.1.3結(jié)構(gòu)體類型變量的初始化和引用

例2:structdate{intyear,month,day;};struct_Student2{charid[10];charname[10];

structdatebirth;

intscore[3]; intsum;}stu2={"20050002","李冬",1987,5,3,75,85,76};9.1.3結(jié)構(gòu)體類型變量的初始化和引用例2:9.1.3結(jié)構(gòu)體類型變量的初始化和引用

對結(jié)構(gòu)體變量初始化的說明:對結(jié)構(gòu)體變量進行初始化時,系統(tǒng)是按每個成員在結(jié)構(gòu)體變量中的順序一一對應賦初值的。若只對部分成員進行初始化,則只能給前面的若干成員賦值,而不允許跳過前面的成員給后面的成員賦值。例如:前面兩例中結(jié)構(gòu)體變量stu1和stu2的成員sum沒有獲得指定初值,而是獲得默認初值0。9.1.3結(jié)構(gòu)體類型變量的初始化和引用對結(jié)構(gòu)體變量初始化9.1.3結(jié)構(gòu)體類型變量的初始化和引用

引用結(jié)構(gòu)體變量的一般方式為:結(jié)構(gòu)體變量名?成員名其中:"?"為結(jié)構(gòu)體成員運算符,1級運算符。例如:stu1.sum表示對結(jié)構(gòu)體變量stu1中的sum成員進行引用。9.1.3結(jié)構(gòu)體類型變量的初始化和引用引用結(jié)構(gòu)體變量的一9.1.3結(jié)構(gòu)體類型變量的初始化和引用

結(jié)構(gòu)體變量的引用規(guī)則:不能將結(jié)構(gòu)體變量作為一個整體進行輸入和輸出。例如:struct_Student3{longnum;intage;charsex;}st;下面的寫法是錯誤的:scanf("%ld%d%c",&st);printf("%ld,%d,%c",st);下面的寫法是正確的:scanf("%ld%d%c",&st.num,&st.age,&st.sex);printf("%ld,%d,%c",st.num,st.age,st.sex);9.1.3結(jié)構(gòu)體類型變量的初始化和引用結(jié)構(gòu)體變量的引用規(guī)9.1.3結(jié)構(gòu)體類型變量的初始化和引用

結(jié)構(gòu)體變量的引用規(guī)則:內(nèi)嵌結(jié)構(gòu)體成員的引用,必須逐層使用成員名定位,找到最底層的成員。例如:

structdate{intyear,month,day;};struct_Student2{charid[10],name[10];structdatebirth;

intscore[3],sum;}stu2={"20050002","李冬",1987,5,3,75,85,76};printf("birthday=%d,%d,%d\n",stu2.birth.year,

stu2.birth.month,stu2.birth.day);9.1.3結(jié)構(gòu)體類型變量的初始化和引用結(jié)構(gòu)體變量的引用規(guī)9.1.3結(jié)構(gòu)體類型變量的初始化和引用

結(jié)構(gòu)體變量的引用規(guī)則:若結(jié)構(gòu)體的成員是字符數(shù)組,可對其進行直接引用。例如:struct_Student{charid[10];charname[10];intscore[3];intsum;}stu1;scanf("%s%s",stu1.id,);printf("id=%s,name=%s",stu1.id,);9.1.3結(jié)構(gòu)體類型變量的初始化和引用結(jié)構(gòu)體變量的引用規(guī)9.1.3結(jié)構(gòu)體類型變量的初始化和引用

結(jié)構(gòu)體變量的引用規(guī)則:若結(jié)構(gòu)體的成員是數(shù)值型數(shù)組,則應逐個引用數(shù)組中的元素。例如:struct_Student{charid[10];charname[10];intscore[3];intsum;}stu1;scanf("%d%d%d",&stu1.score[0],&stu1.score[1],&stu1.score[2]);printf("Math=%d,English=%d,Computer=%d",stu1.score[0],stu1.score[1],stu1.score[2]);9.1.3結(jié)構(gòu)體類型變量的初始化和引用結(jié)構(gòu)體變量的引用規(guī)9.1.3結(jié)構(gòu)體類型變量的初始化和引用

例結(jié)構(gòu)體變量的輸入和輸出typedefstruct_Student{charid[10],name[10];intscore[3],sum;}Student;/*定義結(jié)構(gòu)體類型別名*/voidmain(){Studentstu1,stu2;/*定義結(jié)構(gòu)體變量*/scanf("%s%s%d%d%d",stu1.id,,&stu1.score[0],&stu1.score[1],&stu1.score[2]);stu1.sum=stu1.score[0]+stu1.score[1]+stu1.score[2];stu2=stu1;printf("%s,%s,%d,%d,%d,%d",stu2.id,,stu2.score[0],stu1.score[1],stu1.score[2],stu2.sum);}9.1.3結(jié)構(gòu)體類型變量的初始化和引用例結(jié)構(gòu)體變量的9.1.4結(jié)構(gòu)體數(shù)組

結(jié)構(gòu)體數(shù)組的每個數(shù)組元素都是一個結(jié)構(gòu)體變量,它們都分別包括各個成員項。結(jié)構(gòu)體數(shù)組的定義和定義結(jié)構(gòu)體變量的方法相似,只需說明其為數(shù)組即可。例1:struct_Student{charid[10],name[10];intscore[3],sum;};struct_Studentstu[50];9.1.4結(jié)構(gòu)體數(shù)組結(jié)構(gòu)體數(shù)組的每個數(shù)組元素都是一個結(jié)構(gòu)9.1.4結(jié)構(gòu)體數(shù)組

例2:struct_Student{charid[10],name[10];intscore[3],sum;}stu[50];例3:struct{charid[10],name[10];intscore[3],sum;}stu[50];9.1.4結(jié)構(gòu)體數(shù)組例2:struct_Stude9.1.4結(jié)構(gòu)體數(shù)組

結(jié)構(gòu)體數(shù)組的初始化結(jié)構(gòu)體數(shù)組的初始化與普通數(shù)組的初始化相似。例如:struct_Student{charid[10],name[10];intscore[3],sum;};struct_Studentstu[3]={{"20050001",

"胡樹偉",87,71,81},{"20050002","李冬",75,85,76},{"20050003","梁若嬋",86,75,90}};9.1.4結(jié)構(gòu)體數(shù)組結(jié)構(gòu)體數(shù)組的初始化9.1.4結(jié)構(gòu)體數(shù)組

結(jié)構(gòu)體數(shù)組的引用結(jié)構(gòu)體數(shù)組的引用與結(jié)構(gòu)體變量的引用相似。

例結(jié)構(gòu)體數(shù)組的引用

typedefstruct_Student

溫馨提示

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

評論

0/150

提交評論