版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、,指針,指針的定義 聲明一個指針變量 給指針賦值 指針的運算,自定義數(shù)據(jù)類型,基本數(shù)據(jù)類型 數(shù)據(jù)類型 結構類型,基本數(shù)據(jù)類型有哪些? 如何使用?,問題一:學籍管理,問題:學籍管理需要每個學生的下列數(shù)據(jù):學號、姓名、性別、年齡、分數(shù),請用C語言程序存儲并處理一組學生的學籍。,單個學生學籍的數(shù)據(jù)結構 學號(num):int型 姓名(name):char 型 性別(sex):char型 年齡(age):int型 分數(shù)(score):float型,單個學生學籍的數(shù)據(jù)結構如何定義?,多個學生學籍的數(shù)據(jù)結構如何定義?,解決辦法,定義一個結構體類型 當已有的類型滿足不了需要時,C語言規(guī)定可以由用戶自定義數(shù)據(jù)
2、類型。 struct student int num; char name10; char sex; int age; float score; ;,另一個例子,定義一個結構體類型 日期類型 struct date int month; int day; int year; ;,定義一個結構體類型,語法: struct 結構體名稱 成員列表; ; 定義一個時間類型Time,成員有時、分、秒。,結構體變量的定義 先定義結構體類型,再定義結構體變量 一般形式:,struct 結構體名 類型標識符 成員名; 類型標識符 成員名; . ; struct 結構體名 變量名表列;,例 struct stu
3、dent int num; char name20; char sex; int age; float score; char addr30; ; struct student stu1,stu2;,說明 結構體類型與結構體變量概念不同 類型:不分配內存; 變量:分配內存 類型:不能賦值、存取、運算; 變量:可以 結構體的成員可以是一個結構變量 結構體可嵌套 結構體成員名與程序中變量名可相同,不會混淆 結構體類型及變量的作用域與生存期,諸如學生花名冊、通訊錄之類的數(shù)據(jù),最適合用結構體來處理。因為這類數(shù)據(jù)具有如下特點: 每個人信息都是一個復合的構造數(shù)據(jù),如由姓名、學號、性別、年齡、家庭住址、聯(lián)系
4、電話等“成員”組成。 不同的人,數(shù)據(jù)的值不同,但都有共同的成員組成。,為將不同數(shù)據(jù)類型、但相互關聯(lián)的一組數(shù)據(jù),組合成一個有機整體使用,C語言提供一種稱為“結構”的數(shù)據(jù)類型。,結構體 也是構造類數(shù)據(jù),但其成員可以是任何類型的。,構造類型使用戶可以象處理單個變量一樣來處理復雜的數(shù)據(jù)結構。,要在程序中使用結構必須: 聲明結構類型 結構類型的聲明描述該結構的成員名稱和它們的數(shù)據(jù)類型。 定義結構變量 結構變量的定義是根據(jù)結構類型為所定義變量分配存儲空間。,9.3 結構體變量的引用 引用規(guī)則 結構體變量不能整體引用,只能引用變量成員,可以將一個結構體變量賦值給另一個結構體變量 結構體嵌套時逐級引用(只能對
5、最低級的成員進行賦值或存取以及運算),成員(分量)運算符 優(yōu)先級: 1 結合性:從左向右,引用方式: 結構體變量名.成員名,結構體變量的初始化 形式一:,struct 結構體名 類型標識符 成員名; 類型標識符 成員名; . ; struct 結構體名 結構體變量=初始數(shù)據(jù);,例 struct student int num; char name20; char sex; int age; char addr30; ; struct student stu1=112,“Wang Lin”,M,19, “200 Beijing Road”;,struct 結構體名 類型標識符 成員名; ;,/*
6、struct 結構體名 合稱“結構類型標識符”*/,/*成員表列*/,/*此處分號不能省略*/,小結:什么是“結構體類型”?,用戶自己定義的構造型數(shù)據(jù)類型; 由若干數(shù)據(jù)項(成員)組成; 同一結構體中的成員可以具有不同的數(shù)據(jù)類型; 結構體類型變量占用的內存長度等于各成員項長度之和。,使用結構體的一般步驟,根據(jù)問題的要求定義一個結構體類型 用自己定義的結構體類型定義結構體變量 在程序中使用結構體變量處理問題 注意成員定義與普通變量定義的區(qū)別: 成員定義時不為其分配內存 變量定義時為其分配內存,main() struct student int number; char name6; char se
7、x; int age; char address20; ; printf(%dn ,sizeof(struct student); ,結果: 31,main() struct char name15; char class12; long num; stu=Wenli,Computer 1,200113; printf(%sn%sn%ldn,,stu.class,stu.num); ,結果:Wenli Computer 1 200113,用結構體數(shù)組管理一組學生的信息,前面單個學生可用結構體變量std1,std2處理 若是一個班級的學生呢?,解決辦法: 一組學生的數(shù)據(jù),可以使用
8、結構體數(shù)組進行處理。假定數(shù)組名為std,則定義student數(shù)組,可以使用下面的說明語句: struct student std10; 或者在定義結構體類型的同時定義結構體數(shù)組,9.5 結構體數(shù)組,9.5.1定義結構體數(shù)組:每個數(shù)組元素都是一個結構體類型的數(shù)據(jù),它們都分別包括各個成員項,定義結構體后定義 struct student int num; char name20; char sex; int age; float score; char addr30; ; struct student stu3;,定義結構體時同時定義 struct student int num; char na
9、me20; char sex; int age; float score; char addr30; stu3;,9.5.2 結構體數(shù)組的初始化 結構數(shù)組n初值表1,初值表2,.,初值表n;,一般初始化 省略維數(shù) 定義后初始化,一般初始化 struct student int num; char name20; char sex; int age; float score; stu3= 10101,李寧,M,18,87.5, 10102,張凡,M,19,99, 10103,王敏,F,20,78.5 ;,定義后初始化 struct student int num; char name20; ch
10、ar sex; int age; float score; ; struct student stu3= 10101,李寧,M,18,87.5, 10102,張凡,M,19,99, 10103,王敏,F,20,78.5 ;,每個數(shù)組元素的初始數(shù)據(jù)都用花括號括起來。,例 2統(tǒng)計侯選人選票。有三個候選人,每次輸入一個得票的候選人名,要求最后輸出個人得票結果。,struct person char name20; int count; leader3=“Li”,0,“Zhang”,0,”Wang“,0; main() int i,j; char leader_name20; for(i=1;i=10
11、;i+) scanf(%s,leader_name); for(j=0;j3;j+) if(strcmp(leader_name,)=0) leaderj.count+; for(i=0;i3;i+) printf(%5s:%dn,,leaderi.count); ,9.6 用指針訪問結構體,9.6.1 指向結構體變量的指針 定義形式: struct 結構體名 *結構體指針名; 例: struct student *p; 使用形式: 使用結構體指針變量引用成員形式 (*結構體指針名). 成員名 結構體指針名-成員名 結構體變量名.成員名,成員運算
12、符 . 指向運算符 - 優(yōu)先級: 最高 結合方向:從左向右 (*) 與 - 等價,示例9,main() struct student long int num; char name20; char sex; float score; stu,*p; /定義結構體變量stu和結構體指針變量p p= ,9.2 指向結構體數(shù)組的指針,struct student int num; char name20; char sex; int age; stu3=10101,Li Lin,M,18, 10102,Zhang Fun,M,19, 10104,Wang Min,F,20; main() struc
13、t student *p; for(p=stu;pnum,p-name,p-sex,p-age); ,9.9類型定義(typedef),除可直接使用提供的標準類型和自定義的類型(結構、共用、枚舉)外,也可使用typedef定義已有類型的別名。該別名與標準類型名一樣,可用來定義相應的變量。,給已有的數(shù)據(jù)類型加一個新的別名提高程序可讀性(但未建立新的數(shù)據(jù)類型)。 一般形式: typedef 數(shù)據(jù)類型名 新別名 (已有定義) (習慣用大寫) 例 typedef float REAL; REAL a,b,c;,typedef與#define有相似之處,但二者是不同的:前者是由編譯器在編譯時處理的;后者
14、是由編譯預處理器在編譯預處理時處理的,而且只能作簡單的字符串替換。,用 法,1、簡單數(shù)據(jù)類型 typedef float REAL ; REAL a,b; =float a,b; 2、數(shù)組 typedef char STR80; STR s1; =char s180; 3、指針 typedef float *PF; PF p; =float *p; 4、函數(shù) typedef char FCH( ); FCH a; =char a( );,用 法,5、結構體 typedef struct int year,month,day DATE; DATE birthday; 相當于 struct int year,month,day birthday;,幾個常用函數(shù),malloc函數(shù) realloc函數(shù) free函數(shù) #include 有些編譯器需要#include 。,malloc 向系統(tǒng)申請分配指定size個字節(jié)的內存空間。返回類型是 void* 類型。void* 表示未確定類型的指針。C,C+規(guī)定,void* 類型可以強制轉換為任何其它類型的指針。 例子: int* p; p = (int *) malloc (sizeof(int); 例子: int* p = (int *) malloc ( sizeof(int) *
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年廣東省江門市重點學校初一入學語文分班考試試題及答案
- 2022頭皮美塑療法技術操作規(guī)范專家共識解讀
- 返崗人員安全教育培訓課件
- 云南國防工業(yè)職業(yè)技術學院《軟件實訓(軍工系統(tǒng))》2024-2025 學年第一學期期末試卷(實踐課)
- 達爾文英文介紹
- 2026高考歷史總復習(通史版)第1講 中華文明的起源與早期國家
- 辰州安全培訓課件
- 車險綜合改革培訓課件
- 內蒙古烏蘭察布市事業(yè)單位考錄面試試題
- 煤礦地表塌陷治理方案
- 《念奴嬌 赤壁懷古》《永遇樂 京口北固亭懷古》《聲聲慢》默寫練習 統(tǒng)編版高中語文必修上冊
- 婦產(chǎn)科病史采集臨床思維
- 《半導體器件物理》復習題2012
- 眾辰變頻器z2400t-15gy-1說明書
- 非電量保護裝置技術說明書
- 全國行政區(qū)劃代碼
- 新華書店先進事跡匯報
- 船體振動的衡準及減振方法
- 刑事偵查卷宗
- 水泥混凝土路面滑模攤鋪機施工工法
- 兒童嚴重過敏反應急救演示文稿
評論
0/150
提交評論