《c語言程序設計教學資料》第12章---構體和共同體
向函數傳遞結構體 用結構體指針或結構體數組作為函數參數,向函數傳遞結構體的地址 按值調用 按地址調用 結構體變量作函數參數 實現按值調用 結構體指針作函數參數 從函數返回 結構體變量的值 共用體 共用體所占內存的字節數 不能為共用體的所有成員同時進行初始化,只能對第一個成員進行初始化。此外,共用體成員不能進行比較操作,也不能作為函數參數。 第12章 結構體和共用體 主要內容 定義結構體類型變量的方法 結構體變量的引用 結構體變量的初始化 結構體數組 指向結構體類型數據的指針 共用體 用typedef定義類型 為什么要定義結構體類型 在程序例如何表示一人(姓名、年齡、性別…) 想表示多個人呢? 如何用計算機程序實現下述表格的管理? 初始化 優點:結構緊湊,方便管理,數據的相關性強,便于查找,賦值時只針對某個學生,局部的輸入錯誤不會影響全局和其他人信息 結構體和共用體 C語言允許用戶根據具體問題利用已有的基本類型來構造自己所需的數據類型 數組、結構體、共用體都數據構造性數據類型 結構體定義:由若干不同類型的數據項組成(不同類型數據的集合),構成結構體的各個數據項稱為結構體成員 共同體定義:由若干不同類型的數據項組成,構成共同體的各個數據項稱為共同體成員 數組、結構體、共同體比較 數組:相同類型數據構成,適合于對具有相同類型屬性的數據進行批處理 結構體:將不同類型的數據組織到統一的名字下,適合于關系緊密、邏輯相關、具有相同或者不同屬性的數據進行處理,適合于數據庫管理系統 共同體:邏輯關系相關的不同類型數據集合,但數據成員是情形互斥的,每個時刻只有一個數據成員起作用。 struct 結構體名 { 數據類型 成員1名字; 數據類型 成員2名字; …… 數據類型 成員n名字; }; 成員列表 結構體 定義結構體第一步:聲明結構體模板 格式: 如:struct student { int num; char name[20]; char sex; int age; float score[4]; char addr[30]; }; 聲明結構體模板的主要目的是利用已有的數據類型定義一個新的數據類型 結構體模板只是聲明了一種數據類型,定義了數據的組織形式,并未聲明結構體類型的變量 定義結構體第二步:利用已經定義好的結構體數據類型定義結構體變量 定義結構體變量方式: (1)先聲明結構體模板,在定義結構體變量 struct 結構體名 { 結構體成員變量的定義; } 變量名1,變量名2,...,變量名n; struct 結構體名 { 成員列表 } ; struct 結構體名 變量名1,變量名2,...,變量名n; (2)在聲明結構體模板的同時定義結構體變量 (3)在直接定義結構體變量 struct { 結構體成員變量的定義; } 變量名1,變量名2,...,變量名n; 此時不出現結構體名 方法二: struct student { int number; char name[20]; char sex; int age; float score; }stu1,stu2; 方法一: struct student { int number; char name[20]; char sex; int age; float score; }; struct student stu1,stut2; 說明: 結構體名(struct):用于標識一種新的數據類型,即結構體類型,可以省略。 注意區分結構體類型與基本數據類型的不同,它是復合數據類型。 結構體成員變量與普通變量的定義一樣,它還可以是結構體變量。 嵌套的結構體 num name sex age birthday addr month day year struct Date { int month; int day; int year; }; struct Stu { int num; char name[20]; char sex; int age; struct Da