結構體課件講解_第1頁
結構體課件講解_第2頁
結構體課件講解_第3頁
結構體課件講解_第4頁
結構體課件講解_第5頁
已閱讀5頁,還剩19頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第8章結構體與共用體學習目標掌握結構體類型的基本概念、結構體類型變量的定義及簡單應用。基本掌握結構體類型變量參與函數(shù)調(diào)用的方法。了解鏈表,動態(tài)存儲空間的申請與釋放了解共用體的概念主要內(nèi)容結構體類型的概念結構體數(shù)組結構體與函數(shù)8.1結構體一.結構體類型的定義

結構體類型是由不同類型的數(shù)據(jù)組合而成的。設通過學號、姓名、性別、年齡和入學成績來描述一個學生:以標識符number(字符串)表示學號、name(字符串)表示姓名、sex(字符)表示性別、age(整型)表示年齡和score(整型)表示入學成績。由這些不同類型的數(shù)據(jù)組合在一起,描述學生這一特定類型的對象。稱這種新的數(shù)據(jù)類型為結構體類型,根據(jù)其所描述的對象,將其命名為student結構體類型。定義結構體類型的格式:

struct結構體類型名

{

結構體成員表列

};例如:定義student結構體類型的語句:

structstudent{charnumber[6];charname[20];charsex;intage;intscore;};其中,struct為定義結構體類型的關鍵字,student為所定義的結構體類型名。結構體類型名由用戶命名,但須符合標識符的命名規(guī)則。花括號內(nèi)所定義的變量稱為結構體成員,它們構成了所定義的結構體類型的特征。結構體類型student的特征由結構體成員number[]、name[]、sex、age和score共同描述。最后,以“;”表示定義結構體類型語句結束。

二、結構體變量的定義和引用

student是由用戶定義的數(shù)據(jù)類型,與int、char、float等類型說明符一樣,本身不能直接參與數(shù)據(jù)處理,必須通過定義student類型的變量,才能參與程序運行。

定義結構體類型變量的格式為:

struct結構體類型名變量名;

例如,語句:structstudents1,s2;定義了二個student類型的變量s1和s2,并且由C編譯程序為s1、s2分配存儲單元,假定存儲單元的起始地址為2000H,則s1的存儲情況如圖所示:(轉(zhuǎn)后)結構體變量s1在內(nèi)存中的存儲情況成員age占4字節(jié)成員number占6字節(jié)成員sex占1字節(jié)成員score占4字節(jié)成員name占20字節(jié)2000H2005H2006H

2019H201AH201BH201EH201FH2022H定義結構體類型的又一種格式(定義結構體類型的同時定義結構體類型的變量)struct結構體類型名

{

結構體成員表列

}變量名表列;例如:

structstudent{charnumber[6];charname[20];charsex;intage;intscore;}s1,s2;

在定義結構體類型變量的同時對其初始化對結構體類型變量的初始化就是用初始化數(shù)據(jù)對結構體變量相應的成員作初始化?!纠?-1】結構體變量的初始化。執(zhí)行語句:

structstudent{charnumber[6];charname[20];charsex;intage;intscore;}s1={"00001","Peter",'m',19,250},s2={"00002","Betty",'m',18,268};后,結構體變量s1、s2的成員被賦予相應的值。例如:s1的成員number[]的值為“00001”,age的值為19,結構體變量s2的成員name[]的值為"Betty"、score的值為268。【例8-2】假設學生的入學成績由語文成績、數(shù)學成績和外語成績構成,分別以標識符score1、score2和score3

表示,則可以將入學成績定義為結構體類型score,并重新定義結構體類型student:

structscore{intscore1;intscore2;intscore3;};structstudent{charnumber[6];charname[20];charsex;intage;structscorestscore;}s1={"00001","Peter",'m',19,{75,82,93}},s2={"00002","Betty",'m',18,{81,94,93}};先定義結構體類型score結構體類型score的變量stscore是結構體類型student中的成員2.結構體變量的引用在C程序中,不允許引用結構體變量整體,只能通過結構體變量訪問和引用其成員。引用結構體變量成員的格式:結構體變量名.成員名

以【例8-1】中的結構體變量s1和s2為例:的值為字符串常量"Peter",s2.sex的值為字符常量'm'。再以【例8.2】中的結構體變量s1和s2為例:s1.stscore.score1的值為75,s2.stscore.score3的值為93。由s1.stscore訪問s1的成員stscore,再由stscore.score1訪問stscore的成員score1

說明:

在C程序中,結構體變量成員可以參與同類型變量所能進行的各種運算和操作?!纠?-3】參考例8-1中student類型的定義,以表的形式輸出學生的信息。

#include<stdio.h>

voidmain()

{structstudent{charnumber[6];charname[20];charsex;intage; intscore;}s1={"00001","Peter",'m',19,250},s2={"00002","Betty",'f',18,268};printf("NumberNameSexAgeScore\n");printf("__________________________________\n");printf("%s%s%c%d%d\n",s1.number,,s1.sex,s1.age,s1.score);printf("%s%s%c%d%d\n",s2.number,,s2.sex,s2.age,s2.score);

}三.指向結構體類型數(shù)據(jù)的指針

C編譯程序為結構體變量分配的存儲區(qū)域的首地址就是結構體變量的指針。在C程序中,使用取地址運算符“&”就可以獲得結構體變量的指針。定義結構體類型的指針變量,用于存放結構體變量的指針。

定義結構體類型指針變量的格式為:

struct結構體類型名*指針變量名;例如,定義了結構體類型student以后,下面的語句:structstudents1,s2,*p=&s1;就定義了student類型的二個結構體變量s1、s2和student類型的指針變量p,并使p指向結構體變量s1的存儲地址。

如果結構體指針變量已經(jīng)指向某個結構體變量,則可以通過該指針變量訪問其指向的結構體變量的成員,使用格式:指針變量名->成員名例如:p->number等價于s1.number,p->age等價于s1.age,p->score等價于s1.score?!纠?-4】使用結構體指針變量實現(xiàn)例8-3。

#include<stdio.h>

voidmain(){structstudent{charnumber[6];charname[20];charsex;intage; floatscore;}s1={"00001","Peter",'m',19,250.4},s2={"00002","Betty",'f',18,268.6},*p=&s1;printf("NumberNameSexAgeScore\n");printf("__________________________________\n");printf("%s%s%c%d%f\n",p->number,p->name,p->sex,p->age,p->score);p=&s2;printf("%s%s%c%d%f\n",p->number,p->name,p->sex,p->age,p->score);}四.結構體數(shù)組1.結構體數(shù)組的定義

在定義了結構體類型后,可以定義結構體數(shù)組。

定義結構體數(shù)組的格式:

struct結構體類型名數(shù)組名[元素個數(shù)];

例如:語句:

structstudents[10];定義了一個有10個元素的student類型的數(shù)組s[],數(shù)組的每個元素都是student類型的結構體變量。也可以在定義結構體類型數(shù)組的同時對數(shù)組元素初始化。在C程序中,通過數(shù)組元素名s[i](i=0、1、2、……9)引用相應的結構體成員。

【例8-5】參考例8-2中student類型的定義,從鍵盤輸入學生信息,輸出學生的姓名和成績總分。#include<stdio.h>voidmain(){inti;structscore{intscore1;intscore2;intscore3;};structstudent{charname[10];charsex;intage;structscorestscore;}s[2];for(i=0;i<2;i++){printf("PleaseInputnameandscores\n");scanf("%s",s[i].name);scanf("%d",&s[i].stscore.score1);scanf("%d",&s[i].stscore.score2);scanf("%d",&s[i].stscore.score3);}for(i=0;i<2;i++)printf("%s:TotalScoreis%d\n",s[i].name,(s[i].stscore.score1+s[i].stscore.score2+s[i].stscore.score3));}2.結構體數(shù)組的指針

結構體數(shù)組的指針就是結構體數(shù)組存儲區(qū)域的首地址??梢杂媒Y構體類型的指針變量指向該地址。例如,執(zhí)行語句:structstudent{charnumber[6];charname[20];charsex;intage;intscore;}s[5],*p=s;

后,指針變量p指向結構體數(shù)組s[]的首地址。則:p指向s[0],p+1指向s[1],p+2指向s[2]……

【例8-6】用指針變量實現(xiàn)例8-5的功能。

#include<stdio.h>main(){inti;structscore{intscore1;intscore2;intscore3;};structstudent{charname[10];charsex;intage;structscorestscore;}s[2],*p=s;for(i=0;i<2;i++){printf("PleaseInputnameandscores\n");scanf("%s",(p+i)->name);scanf("%d",&((p+i)->stscore.score1));scanf("%d",&((p+i)->stscore.score2));scanf("%d",&((p+i)->stscore.score3));}for(p=s;p<s+2;p++)printf("%s:TotalScoreis%d\n",p->name,(p->stscore.score1+p->stscore.score2+p->stscore.score3));}此處的括號不可少

此處的括號不可少

五.結構體與函數(shù)結構體變量、結構體成員和結構體類型的指針變量都能夠作為形參或?qū)崊⑴c函數(shù)調(diào)用。在函數(shù)調(diào)用過程中,遵循和基本數(shù)據(jù)類型變量相同的規(guī)則。【例8-7】通過函數(shù)調(diào)用實現(xiàn)例8-5的功能。#include<stdio.h>

structscore{intscore1;intscore2;intscore3;};structstudent{charname[10];charsex;intage;structscorestscore;};inttotal(structstudentstud);(轉(zhuǎn)后)形參為student類型的結構體變量stud

main(){inti;structstudents[2];for(i=0;i<2;i++){printf("PleaseInputnameandscores\n");scanf("%s",s[i].name);scanf("%d",&s[i].stscore.score1);scanf("%d",&s[i].stscore.score2);scanf("%d",&s[i].stscore.score3);}for(i=0;i<2;i++)printf("%s:TotalScoreis%d\n",s[i].name,total(s[i]));}inttotal(structstudentstud){return(stud.stscore.score1+stud.stscore.score2+stud.stscore.score3);}(接前)實參為student類型的結構體變量s[i]

【例8-8】結構體數(shù)組指針參與函數(shù)調(diào)用的例子。本例程序?qū)崿F(xiàn)從鍵盤輸入學生學號,經(jīng)搜索后輸出該學生信息。#include<stdio.h>

#include<string.h>structstudent

{charnumber[6];

charname[20];charsex;intage;intscore;};

溫馨提示

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

評論

0/150

提交評論