C語言的指針和結(jié)構(gòu)體PPT優(yōu)秀課件_第1頁(yè)
C語言的指針和結(jié)構(gòu)體PPT優(yōu)秀課件_第2頁(yè)
C語言的指針和結(jié)構(gòu)體PPT優(yōu)秀課件_第3頁(yè)
C語言的指針和結(jié)構(gòu)體PPT優(yōu)秀課件_第4頁(yè)
C語言的指針和結(jié)構(gòu)體PPT優(yōu)秀課件_第5頁(yè)
已閱讀5頁(yè),還剩34頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、C C 語言中的指針與語言中的指針與 結(jié)構(gòu)體結(jié)構(gòu)體 指針指針的概念的概念 地址地址 內(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 指針變量指針變量 指針變量指針變量:存放地址的變量:存放地址的變量 某個(gè)某個(gè)變量變量的地址的地址 指向指向 (內(nèi)存單元內(nèi)存單元) 指針變量所指向的變量的類型指針變量所指向的變量的類型 int *p; p 是整型指針,指向整型變量是整型指針,指向整型變量 float *fp; fp 是浮點(diǎn)型指針,指向浮點(diǎn)型變量是浮點(diǎn)型指

2、針,指向浮點(diǎn)型變量 char *cp; cp 是字符型指針,指向字符型變量是字符型指針,指向字符型變量 類型名類型名 * 指針變量名指針變量名 指針聲明符指針聲明符 指針變量的定義指針變量的定義 取地址運(yùn)算取地址運(yùn)算( p = 把把 a 的地址賦給的地址賦給 p,即,即 p 指向指向 a /指針變量的類型和它所指向變量的類型相同指針變量的類型和它所指向變量的類型相同 a 3 定義定義指針變量指針變量 p *p =10; 指針指針p所指所指向向的變量的變量,即,即a,改變變量值,改變變量值 (3) p = 賦值運(yùn)算賦值運(yùn)算 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ù)中某個(gè)變量的值:要通過函數(shù)調(diào)用來改變主調(diào)函數(shù)中某個(gè)變量的值: (1) 在主調(diào)函數(shù)中,在主調(diào)函數(shù)中,將該變量的地址或者指向該變量的將該變量的地址或者指向該變量的 指針作為實(shí)參指針作為實(shí)參 (2) 在被調(diào)函數(shù)中,在被調(diào)函數(shù)中,用指針類型形參接受該變量的地址用指針類型形參接受該變量的地址 (3) 在被調(diào)函數(shù)中,改變

5、形參所指向變量的值在被調(diào)函數(shù)中,改變形參所指向變量的值 a b pxpy 1221 / swap ( 數(shù)組和地址間的關(guān)系數(shù)組和地址間的關(guān)系 int a100, *p; 數(shù)組名代表一個(gè)地?cái)?shù)組名代表一個(gè)地 址,它的值是數(shù)址,它的值是數(shù) 組首元素的地址組首元素的地址 (基地址)(基地址) a+i 是距數(shù)組是距數(shù)組a的的 基地址的第基地址的第i個(gè)偏個(gè)偏 移移 3000 a0 地址地址 內(nèi)容內(nèi)容 數(shù)組元素?cái)?shù)組元素 3002 a1 3198 a99 ai a a+1 a+99 a+i for(i = 0; i 100; i+) sum = sum + ai ;*(a+i) 下標(biāo)運(yùn)算符下標(biāo)運(yùn)算符 的含義的含

6、義 任何由數(shù)組下標(biāo)來實(shí)現(xiàn)的操作都能用指針來完成任何由數(shù)組下標(biāo)來實(shí)現(xiàn)的操作都能用指針來完成 int a100, *p; p = a; 或或 p = p p+1 p+99 p+i 3000 a0 地址地址 內(nèi)容內(nèi)容 數(shù)組元素?cái)?shù)組元素 3002 a1 3198 a99 ai a a+1 a+99 a+i sum = 0; for(i = 0; i 100; i+) sum = sum + pi; 等價(jià)等價(jià) 等價(jià)等價(jià) *(p+i) sum = 0; for(p = a; p ”訪問指針指向的結(jié)構(gòu)成員。訪問指針指向的結(jié)構(gòu)成員。 p-age = 26; 當(dāng)當(dāng)p = (*p).age = 26; p-age

7、 = 26; 結(jié)構(gòu)體指針作為函數(shù)參數(shù)結(jié)構(gòu)體指針作為函數(shù)參數(shù) 當(dāng)結(jié)構(gòu)指針作為函數(shù)的參數(shù)時(shí),執(zhí)行效率高,當(dāng)結(jié)構(gòu)指針作為函數(shù)的參數(shù)時(shí),執(zhí)行效率高, 可以完成比基本類型指針更為復(fù)雜的操作??梢酝瓿杀然绢愋椭羔樃鼮閺?fù)雜的操作。 例:輸入例:輸入10個(gè)學(xué)生的學(xué)號(hào)、姓名和成績(jī),輸個(gè)學(xué)生的學(xué)號(hào)、姓名和成績(jī),輸 出學(xué)生的成績(jī)等級(jí)和不及格人數(shù)。出學(xué)生的成績(jī)等級(jí)和不及格人數(shù)。 每個(gè)學(xué)生的記錄包括學(xué)號(hào)、姓名、成績(jī)和等級(jí)每個(gè)學(xué)生的記錄包括學(xué)號(hào)、姓名、成績(jī)和等級(jí) 要求定義和調(diào)用函數(shù)要求定義和調(diào)用函數(shù)set_grade根據(jù)學(xué)生成績(jī)?cè)O(shè)置等級(jí),根據(jù)學(xué)生成績(jī)?cè)O(shè)置等級(jí), 并統(tǒng)計(jì)不及格人數(shù)并統(tǒng)計(jì)不及格人數(shù) 等級(jí)設(shè)置:等級(jí)設(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ù)中結(jié)構(gòu)體數(shù)組返回主函數(shù)后,主函數(shù)中結(jié)構(gòu)體數(shù)組stu的的 元素的元素的grade成員已經(jīng)被賦值成員已經(jīng)被賦值. 與結(jié)構(gòu)體變量作為函數(shù)參數(shù)相比,用結(jié)構(gòu)體指針作為函數(shù)參與結(jié)構(gòu)體變量作為函數(shù)參數(shù)相比,用結(jié)構(gòu)體指針作為函數(shù)參 數(shù)的效率更高,因而是更好的選擇。數(shù)的效率更高,因而是更好的選擇。 多文件結(jié)構(gòu)多文件結(jié)構(gòu) 工作區(qū)工作區(qū) 工程工程1工程工程2工程工程n

10、頭文頭文 件件 源文源文 件件 例:例:VC中的多文件結(jié)構(gòu)中的多文件結(jié)構(gòu) 示例示例 #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é)點(diǎn)數(shù)據(jù)類型定義表節(jié)點(diǎn)數(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 /各操作的實(shí)現(xiàn)各操作的實(shí)現(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é)點(diǎn)產(chǎn)生各節(jié)點(diǎn) srand(time(NULL); for (i=0;i10;i+) /產(chǎn)生產(chǎn)生10個(gè)整數(shù),插入順序表表尾個(gè)整數(shù),插入順序表表尾 num = rand() % 100; ListInsert_Sq(L,i+1,(ElemType)num); 源文件:源文件:SqDemo.cpp ( 包含主函數(shù)包含主函數(shù)main() ) /輸出原始順序表的各個(gè)值

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論