![C語言的指針和結構體PPT優(yōu)秀課件_第1頁](http://file2.renrendoc.com/fileroot_temp3/2021-8/1/4325a8a1-71d0-47ca-bc19-1889d7346331/4325a8a1-71d0-47ca-bc19-1889d73463311.gif)
![C語言的指針和結構體PPT優(yōu)秀課件_第2頁](http://file2.renrendoc.com/fileroot_temp3/2021-8/1/4325a8a1-71d0-47ca-bc19-1889d7346331/4325a8a1-71d0-47ca-bc19-1889d73463312.gif)
![C語言的指針和結構體PPT優(yōu)秀課件_第3頁](http://file2.renrendoc.com/fileroot_temp3/2021-8/1/4325a8a1-71d0-47ca-bc19-1889d7346331/4325a8a1-71d0-47ca-bc19-1889d73463313.gif)
![C語言的指針和結構體PPT優(yōu)秀課件_第4頁](http://file2.renrendoc.com/fileroot_temp3/2021-8/1/4325a8a1-71d0-47ca-bc19-1889d7346331/4325a8a1-71d0-47ca-bc19-1889d73463314.gif)
![C語言的指針和結構體PPT優(yōu)秀課件_第5頁](http://file2.renrendoc.com/fileroot_temp3/2021-8/1/4325a8a1-71d0-47ca-bc19-1889d7346331/4325a8a1-71d0-47ca-bc19-1889d73463315.gif)
版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、C C 語言中的指針與語言中的指針與 結構體結構體 指針指針的概念的概念 地址地址 內(nèi)容內(nèi)容 變量名變量名 int x = 20, y = 1, z = 155; int *p; p= 1000 20 x 1002 1 y 1004 155 z 2000 1000 p 2002 指針變量指針變量 指針變量指針變量:存放地址的變量:存放地址的變量 某個某個變量變量的地址的地址 指向指向 (內(nèi)存單元內(nèi)存單元) 指針變量所指向的變量的類型指針變量所指向的變量的類型 int *p; p 是整型指針,指向整型變量是整型指針,指向整型變量 float *fp; fp 是浮點型指針,指向浮點型變量是浮點型指
2、針,指向浮點型變量 char *cp; cp 是字符型指針,指向字符型變量是字符型指針,指向字符型變量 類型名類型名 * 指針變量名指針變量名 指針聲明符指針聲明符 指針變量的定義指針變量的定義 取地址運算取地址運算( p = 把把 a 的地址賦給的地址賦給 p,即,即 p 指向指向 a /指針變量的類型和它所指向變量的類型相同指針變量的類型和它所指向變量的類型相同 a 3 定義定義指針變量指針變量 p *p =10; 指針指針p所指所指向向的變量的變量,即,即a,改變變量值,改變變量值 (3) p = 賦值運算賦值運算 a 3 p1 = /把把 a 的地址賦給的地址賦給 p1,即,即 p1
3、指向指向 a p2 = p1; /p2 也指向也指向 a /相同類型的指針才能相互賦值相同類型的指針才能相互賦值 注意:注意: 指針指針變量必須初始化。變量必須初始化。 void main () int a=1, b=2 , *p1 , *p2 , *pt; p1 = p2 = printf (a=%d, b=%d, *p1=%d, *p2=%dn, a, b, *p1, *p2); pt = p1; p1 = p2; p2 = pt; printf (“a=%d, b=%d, *p1=%d, *p2=%dn”, a, b, *p1, *p2); return 0; p1 b 2 b = 2;
4、 *p1 = 1, *p2 = 2 a = 1; b = 2; *p1 = 2, *p2 = 1 指針指針作為函數(shù)參數(shù)作為函數(shù)參數(shù) void swap (int *px, int *py) int t; t = *px; *px = *py; *py = t; 要通過函數(shù)調(diào)用來改變主調(diào)函數(shù)中某個變量的值:要通過函數(shù)調(diào)用來改變主調(diào)函數(shù)中某個變量的值: (1) 在主調(diào)函數(shù)中,在主調(diào)函數(shù)中,將該變量的地址或者指向該變量的將該變量的地址或者指向該變量的 指針作為實參指針作為實參 (2) 在被調(diào)函數(shù)中,在被調(diào)函數(shù)中,用指針類型形參接受該變量的地址用指針類型形參接受該變量的地址 (3) 在被調(diào)函數(shù)中,改變
5、形參所指向變量的值在被調(diào)函數(shù)中,改變形參所指向變量的值 a b pxpy 1221 / swap ( 數(shù)組和地址間的關系數(shù)組和地址間的關系 int a100, *p; 數(shù)組名代表一個地數(shù)組名代表一個地 址,它的值是數(shù)址,它的值是數(shù) 組首元素的地址組首元素的地址 (基地址)(基地址) a+i 是距數(shù)組是距數(shù)組a的的 基地址的第基地址的第i個偏個偏 移移 3000 a0 地址地址 內(nèi)容內(nèi)容 數(shù)組元素數(shù)組元素 3002 a1 3198 a99 ai a a+1 a+99 a+i for(i = 0; i 100; i+) sum = sum + ai ;*(a+i) 下標運算符下標運算符 的含義的含
6、義 任何由數(shù)組下標來實現(xiàn)的操作都能用指針來完成任何由數(shù)組下標來實現(xiàn)的操作都能用指針來完成 int a100, *p; p = a; 或或 p = p p+1 p+99 p+i 3000 a0 地址地址 內(nèi)容內(nèi)容 數(shù)組元素數(shù)組元素 3002 a1 3198 a99 ai a a+1 a+99 a+i sum = 0; for(i = 0; i 100; i+) sum = sum + pi; 等價等價 等價等價 *(p+i) sum = 0; for(p = a; p ”訪問指針指向的結構成員。訪問指針指向的結構成員。 p-age = 26; 當當p = (*p).age = 26; p-age
7、 = 26; 結構體指針作為函數(shù)參數(shù)結構體指針作為函數(shù)參數(shù) 當結構指針作為函數(shù)的參數(shù)時,執(zhí)行效率高,當結構指針作為函數(shù)的參數(shù)時,執(zhí)行效率高, 可以完成比基本類型指針更為復雜的操作??梢酝瓿杀然绢愋椭羔樃鼮閺碗s的操作。 例:輸入例:輸入10個學生的學號、姓名和成績,輸個學生的學號、姓名和成績,輸 出學生的成績等級和不及格人數(shù)。出學生的成績等級和不及格人數(shù)。 每個學生的記錄包括學號、姓名、成績和等級每個學生的記錄包括學號、姓名、成績和等級 要求定義和調(diào)用函數(shù)要求定義和調(diào)用函數(shù)set_grade根據(jù)學生成績設置等級,根據(jù)學生成績設置等級, 并統(tǒng)計不及格人數(shù)并統(tǒng)計不及格人數(shù) 等級設置:等級設置: A
8、 :85100;B:7084;C:6069;D:059 源程序源程序 #define N 10 struct student int num; char name20; int score; char grade; ; int main(void) int count; struct student stuN, *ptr; ptr = stu; /* 輸入輸入 略略 */ count = set_grade( ptr ); int set_grade(struct student * p) int i, n = 0; for(i = 0; i score = 85) p-grade = A;
9、else if(p-score = 70) p-grade = B; else if(p-score = 60) p-grade = C; else p-grade = D; n+; return n; 調(diào)用調(diào)用set_grade返回主函數(shù)后,主函數(shù)中結構體數(shù)組返回主函數(shù)后,主函數(shù)中結構體數(shù)組stu的的 元素的元素的grade成員已經(jīng)被賦值成員已經(jīng)被賦值. 與結構體變量作為函數(shù)參數(shù)相比,用結構體指針作為函數(shù)參與結構體變量作為函數(shù)參數(shù)相比,用結構體指針作為函數(shù)參 數(shù)的效率更高,因而是更好的選擇。數(shù)的效率更高,因而是更好的選擇。 多文件結構多文件結構 工作區(qū)工作區(qū) 工程工程1工程工程2工程工程n
10、頭文頭文 件件 源文源文 件件 例:例:VC中的多文件結構中的多文件結構 示例示例 #include #include #include #include /常量定義常量定義 #define LIST_INIT_SIZE 100 #define LISTINCREMENT 10 #define OK 1 #define ERROR 0 #define OVERFLOW -2 #define True 1 #define False 0 /函數(shù)返回值類型定義函數(shù)返回值類型定義 typedef int Status; /表節(jié)點數(shù)據(jù)類型定義表節(jié)點數(shù)據(jù)類型定義 typedef int ElemType
11、; /順序表類型定義順序表類型定義 typedef struct ElemType *elem; int length; int listsize; SqList; /順序表各操作聲明順序表各操作聲明 Status InitList_Sq(SqList Status DetroyList_Sq(SqList Status ClearList_Sq(SqList int ListEmpty_Sq(SqList L); int ListLength_Sq(SqList L); Status GetElem_Sq(SqList L,int i,ElemType Status ListInsert_S
12、q(SqList Status ListDelete_Sq(SqList void PrintList_Sq(SqList L); 頭文件:頭文件:SqList.h #include SqList.h /各操作的實現(xiàn)各操作的實現(xiàn) Status InitList_Sq(SqList if (!L.elem) exit(OVERFLOW); L.length=0; L.listsize=LIST_INIT_SIZE; return OK; Status DetroyList_Sq(SqList return OK; Status ClearList_Sq(SqList L.listsize=0;
13、return OK; 源文件:源文件:SqList.cpp int ListEmpty_Sq(SqList L) return (L.length=0); int ListLength_Sq(SqList L) return L.length; Status GetElem_Sq(SqList L,int i,ElemType e=L.elemi-1; return OK; Status ListInsert_Sq(SqList if (iL.length+1) return ERROR; if (L.length=L.listsize) newbase = (ElemType *)reall
14、oc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType); if (!newbase) exit(OVERFLOW); L.elem=newbase; L.listsize+=LISTINCREMENT; q= for (p=p=q;p-) *(p+1)=*p; *q=e; L.length+; return OK; Status ListDelete_Sq(SqList if (iL.length) return ERROR; p= e=*p; q=L.elem+L.length-1; for (+p;pq;+p) *(p-1)=*p; L.
15、length-; return OK; void PrintList_Sq(SqList L) int i; if (L.length=0) cout該表為空該表為空endl; else for (i=0;iL.length;i+) coutL.elemi ; #include SqList.h void main() SqList L; int i,num; cout創(chuàng)建順序表創(chuàng)建順序表endl; if (!InitList_Sq(L) cout表創(chuàng)建失敗表創(chuàng)建失敗; /創(chuàng)建空順序表創(chuàng)建空順序表L else /產(chǎn)生各節(jié)點產(chǎn)生各節(jié)點 srand(time(NULL); for (i=0;i10;i+) /產(chǎn)生產(chǎn)生10個整數(shù),插入順序表表尾個整數(shù),插入順序表表尾 num = rand() % 100; ListInsert_Sq(L,i+1,(ElemType)num); 源文件:源文件:SqDemo.cpp ( 包含主函數(shù)包含主函數(shù)main() ) /輸出原始順序表的各個值
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 湘教版數(shù)學八年級下冊4.3《一次函數(shù)的圖象》聽評課記錄
- 北師大版道德與法治七年級上冊6.1《人人平等》聽課評課記錄
- 2022年新課標九年級上冊道德與法治第1-8課全冊16課時聽課評課記錄
- 人教部編版七年級歷史上冊第11課《西漢建立和“文景之治”》聽課評課記錄1
- 人教版地理七年級下冊8.3《撒哈拉以南非洲》聽課評課記錄1
- 人民版道德與法治九年級上冊1.2《理性面對新媒體》聽課評課記錄
- 煤礦買賣居間合同范本
- 快遞區(qū)域經(jīng)營權轉讓合同范本
- 湘教版數(shù)學七年級上冊4.2《線段的長短比較》聽評課記錄1
- 鋼架大棚建設工程合同范本
- 重慶八中2024屆高三12月高考適應性月考卷(四) 語文試卷(含答案)
- 出差報銷單-中英對照版
- 電流互感器試驗報告
- 蔣中一動態(tài)最優(yōu)化基礎
- 七年級英語閱讀理解10篇(附答案解析)
- 抖音來客本地生活服務酒旅商家代運營策劃方案
- 鉆芯法樁基檢測報告
- 【學前教育小學化成因分析及其對策10000字(論文)】
- 無線網(wǎng)網(wǎng)絡安全應急預案
- 國籍狀況聲明書【模板】
- 常用保潔綠化人員勞動合同范本5篇
評論
0/150
提交評論