[程式設計筆記]第九章 拓展型別
阿新 • • 發佈:2019-01-03
1 拓展型別 結構體 2 3 結構體 4 1. 為什麼需要結構體? 5 為了表示一些複雜的事物,而普通的基本型別無法滿足實際要求 6 2. 什麼叫結構體? 7 把一些基本型別資料組合在一起形成的一個新的複合資料型別,叫做結構體 8 3. 如何定義結構體? 9 //三種方式,推薦使用第一種 10 struct Student //第一個方式 11 { 12 int age ; 13 float score ;14 char sex ; 15 } 16 17 //第二種方式 18 struct Student2 19 { 20 int age ; 21 float score ; 22 char sex ; 23 24 } st2 ; 25 26 //第三種方式 27 struct 28 { 29 int age ; 30 floatscore ; 31 char sex ; 32 } st3 ; 33 34 怎樣使用結構體變數 35 賦值和初始化 36 定義的同時可以整體賦值 37 如果定義完之後,則只能單個的賦初值 38 39 如果取出結構體變數中的每一個成員[成員] 【重點】 40 1. 結構體變數名.成員名 41 2. 指標變數名 -> 成員名 (第二種方式更常用) 42 3. 指標變數名 -> 成員名43 在計算機內部會被轉化成(*指標變數名).成員名的方式來執行 44 所以說這兩種方法是等價的 45 46 //例子: 47 struct Student 48 { 49 int age ; 50 float score ; 51 char sex ; 52 } ; 53 54 int main() 55 { 56 struct Student st = {80,66.6,'F'} ; 57 //初始化 定義的同時賦初值 58 struct Student * pst = &st ; 59 //&st 不能改成st 60 pst —> age = 88 ; //第二種方式 61 st.age = 10 ; //第一種方式 62 63 return 0; 64 } 65 66 1. pst -> age 在計算機內部會被轉化成(*pst).age 67 沒有什麼為什麼,這就是->的含義,這也是一種硬性規定 68 2. 所以pst->age 等價於 (*pst).age 也等價於st.age 69 3. 我們之所以知道pst->age等價於st.age 70 是因為pst->age是被轉化成(*pst).age來執行 71 4. pst->age 的含義是: 72 pst所指向的那個結構體變數中的age這個成員 73 74 結構體變數和結構體指標變數作為函式引數傳遞的問題 75 推薦使用結構體指標變數作為函式引數來傳遞 76 結構體變數的運算 77 結構體變數不能相加 不能相減 也不能相互乘除 78 但結構體變數可以相互賦值 79 80 //例子: 81 struct Student 82 { 83 int age ; 84 char sex ; 85 char name ; 86 } ;//分號不能省 87 struct Student st1,st2 ; 88 st1 + st2 st1 * st2 st1/st2 都是錯誤的 89 st1 = st2 或者 st2 = st1 都是正確的 90 //舉例 91 動態構造存放學生資訊的結果體陣列 92 動態構造一個數組,存放學生的資訊 93 然後按照分數排序 94 95 列舉 96 什麼是列舉 97 把一個事物所有可能的取值一一列舉出來 98 怎麼樣使用列舉 99 100 列舉的優缺點 101 程式碼更安全 102 書寫麻煩