




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
structstd_info /*學生信息結構類型*/{charno[7];charname[9];charsex[3];
structdatebirthday;};structscore /*成績結構類型*/{charno[7];
intscore1,score2,score3;};字符數組的長度=實際長度+1(存儲結束標志)允許是已定義的另一個結構體類型1、結構體類型的定義
struct結構體類型名
{數據類型數據項1;
數據類型數據項2;
…………
數據類型數據項n;
};分號不能少!結構體類型關鍵字(1)“結構體類型名”和“數據項”的命名規則,與變量名相同。(2)相同數據類型的數據項,既可逐個、逐行分別定義,也可合并成一行定義。例如,[案例10.1]中的結構體類型date。
(3)結構體類型中的數據項,允許是已定義的另一個結構體類型。例如,[案例10.1]中、結構體類型std_info的數據項“birthday”。2、結構體變量的定義(1)間接定義──先定義類型、再定義變量例如,利用[案例10.1]中、結構體類型std_info,定義結構體變量student:
structstd_infostudent;則結構體變量student擁有結構體類型std_info的全部數據項。結構體類型名不可缺!下列寫法是錯誤的:structstudent;(2)直接定義──定義類型的同時,定義變量
struct[結構類型名]{……}結構變量表;說明:結構類型中的數據項名(又稱成員名),可以與程序中的變量同名。2*
結構體變量的引用與初始化[例2]利用[例1]中的結構體類型std_info,定義結構體變量student,用于存儲和顯示1個學生的信息。#include"struct.h"structstd_infostudent={"000102","張三","男",{1980,9,20}};#include"stdio.h"#include"conio.h"voidmain()
{printf("No:%s\n",student.no);printf("Name:%s\n",student.name);printf("Sex:%s\n",student.sex);printf("Birthday:%d-%d-%d\n",student.birthday.year,
student.birthday.month,student.birthday.day
);getch();}[例1]中定義的結構體類型成員運算符程序運行結果:
No:000102Name:張三
Sex:男
Birthday:1980-9-201、結構體變量成員的引用規則(1)基本類型:結構變量.成員例如,student.no,等。(2)
結構體類型:結構變量.成員[.成員……]例如:student.birthday.year student.birthday.month student.birthday.day
本身是結構類型,只能訪問它的成員(3)最低1級成員,等價同類型的普通變量。(4)既可引用結構體變量成員的地址,也可引用結構變量的地址。例如,&student.name
,&student
。2、結構體變量的初始化結構體變量={初值表}與1維數組相似,但結構體類型成員的初值,是一個初值表。例如,structstd_infostudent={"000102","張三","男",{1980,9,20}}。注:初值的數據類型,應與結構變量中相應成員所要求的一致,否則會出錯。[返回]3結構體數組
結構體數組的每一個元素,都是結構體類型數據,均包含結構體類型的所有成員。
[例3]利用structstd_info,定義一個結構體數組student[3],用于存儲和顯示3個學生的基本情況。#include"stdio.h"#include"conio.h"#include"struct.h"
structstd_infostudent[3]={{“000102”,“張三”,“男”,{1980,9,20}},
{“000105”,“李四”,“男”,{1980,8,15}},
{“000112”,“王五”,“女”,{1980,3,10}}};voidmain(){inti;/*打印表頭:"□"表示1個空格字符*/printf("No.□□□□Name□□□□□Sex□Birthday\n"); for(i=0;i<3;i++){printf("%-7s",student[i].no);printf("%-9s",student[i].name);printf("%-4s",student[i].sex);printf("%d-%d-%d\n",student[i].birthday.year,
student[i].birthday.month, student[i].birthday.day);}getch();}思考:student[i].nostudent.no[i]?數組元素是結構變量程序運行結果:
No.NameSexBirthday000102張三男1980-9-20000105李四男1980-8-15000112王五女1980-3-101、結構體數組的定義與結構體變量的定義類似,可以直接或間接定義,只需說明為數組即可。2、結構體數組的初始化結構體數組[n]={{初值表1},{初值表2},...}思考:與2維數組初始化相似嗎?[返回]4*
指向結構體數據的指針(1)指向結構體變量的指針
[例4]使用指向結構體變量的指針,訪問其各個成員。#include"stdio.h"#include"conio.h"#include“struct.h”structstd_infostudent={“000102”,“張三”,“男”,{1980,9,20}};voidmain(){structstd_info
*p_std=&student;printf("No:%s\n",p_std->no);printf("Name:%s\n",p_std->name);printf("Sex:%s\n",p_std->sex);printf("Birthday:%d-%d-%d\n",p_std->birthday.year,
p_std->birthday.month, p_std->birthday.day);getch();}->:指向結構變量成員運算符如果指針變量pointer已指向結構體變量var,則以下三種形式等價:(1)var.成員(2)pointer->成員(3)(*pointer).成員思考:如果要求從鍵盤上輸入student的各成員數據,如何修改程序?var只能是結構體變量名pointer只能是指針變量括號不能缺!……voidmain(){structstd_info
*p_std=&student;printf(“No=”);scanf(“%s”,p_std->no);…………printf("year=“);scanf(“%d”,&
p_std->birthday.year);…………}注:無論輸入或輸出,最低級成員的性質(變量/指針),決定輸入項或輸出項表達式的性質。取birthday.year的地址此處不能加&。為什么?(2)指向結構體數組的指針[例5]使用指向結構數組的指針來訪問結構數組。#include"stdio.h"#include"conio.h"#include"struct.h"structstd_infostudent[3]={{"000102","張三","男",{1980,5,20}},{"000105","李四","男",{1980,8,15}},{“000112”,“王五”,“女”,{1980,3,10}}};voidmain(){structstd_info*p_std=student; inti=0;指向結構數組student的指針/*打印表頭*/printf("No.□□□□Name□□□□□Sex□Birthday\n");/*輸出*/for(;i<3;i++,p_std++){printf("%-7s%-9s%-4s%4d-%2d-%2d\n",p_std->no,p_std->name,p_std->sex,p_std->birthday.year,
p_std->birthday.month,p_std->birthday.day);}getch();}指向結構數組的下一個元素,而不是當前元素的下一個成員
(3)指向結構數據的指針作函數參數
[例6]編寫顯示函數display(),通過主函數調用來實現[例5]的顯示。#include"stdio.h"#include"conio.h"#include"struct.h"structstd_infostudent[3]={{"000102","張三","男",{1980,5,20}},{"000105","李四","男",{1980,8,15}},{“000112”,“王五”,“女”,{1980,3,10}}};voiddisplay(structstd_info*p_std){printf("%-7s%-9s%-4s",p_std->no,p_std->name,p_std->sex);printf("%4d-%2d-%2d\n",p_std->birthday.year,p_std->birthday.month, p_std->birthday.day);}voidmain(){inti=0;printf("No.□□□□Name□□□□□Sex□Birthday\n");for(;i<3;i++){display(student+i); printf("\n");}getch();}[返回]8.4共同體類型1.共用體的概念、定義及其變量說明(1)共用體的概念
有時需要使幾種不同類型的變量存放到同一段內存單元中。例如,可把一個整型變量、一個字符型變量、一個實型變量放在同一個地址開始的內存單元中。即使用覆蓋技術,幾個不同的變量共占同一段內存的結構,稱為“共用體”類型的結構。說明:在結構體中各成員有各自的內存空間,一個結構體變量的總長度是各成員長度之和。而在“共用體”中,各成員共享一段內存空間,一個共用體變量的長度等于各成員中最長的長度。
2.結構類
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 信息處理技術員職業規劃與試題及答案
- 技術員考試考前心態調節與試題及答案
- 網絡管理員考試準備試題及答案梳理
- 軟件開發中的產品思維考題及答案
- 職場提升的網絡管理員考試試題及答案
- 法學概論中的價值觀念與立法實踐試題及答案
- 2025年軟考網絡管理員導向試題及答案
- 未來企業戰略與團隊管理的試題及答案
- 學習與掌握網絡管理工具的使用試題及答案
- 公司戰略人才管理試題及答案
- 教育的情調讀書分享會PPT
- C-TPAT反恐程序文件(完整版)
- 托福詞匯10000電子講義
- 教學茶樹植物保護茶樹常見害蟲及防治
- 連用文件云通用方案
- 電力安裝EC總承包工程技術投標文件
- 施工單位與勞務分包工程量結算單
- 廣告設計制作、施工安裝及售后服務方案
- 線段的垂直平分線(第1課時) 教學設計
- 建筑工程概預算智慧樹知到答案章節測試2023年浙江廣廈建設職業技術大學
- 數據出境安全評估申報指南(第一版)
評論
0/150
提交評論