freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

c語言程序設(shè)計一體化案例教程下ppt(已修改)

2025-04-23 22:12 本頁面
 

【正文】 C語言程序設(shè)計一體化案例教程(下) 清華大學(xué)出版社 第 08章 指針 第 09章 自定義數(shù)據(jù)類型 第 10章 文件 第 8 章 指針? 概念: 參見 節(jié)? 應(yīng)用:? 指針做函數(shù)參數(shù)、做函數(shù)返回值 :參見 節(jié)? 數(shù)組做函數(shù)參數(shù) :參見案例 ? 指針與數(shù)組的關(guān)系、指針數(shù)組、指針的指針、函數(shù)指針、堆內(nèi)存的申請、釋放與使用 : 本章? 指針與結(jié)構(gòu)體的關(guān)系 、 單向鏈表 :參見 第 9 章? 利弊: 正確使用指針,能有效使用各種復(fù)雜數(shù)據(jù)結(jié)構(gòu),動態(tài)分配內(nèi)存,高效使用數(shù)組和字符串,編寫通用程序等;但不當使用,可導(dǎo)致運行出錯或死機。? 學(xué)習(xí)建議: 正確理解指針,多用指針編程,多調(diào)試,不怕出錯,定能正確掌握、靈活運用指針。目錄 指針的運算 指針與數(shù)組 指針數(shù)組 二級指針 帶參的 main 函數(shù) 函數(shù)指針 堆內(nèi)存的申請、使用和釋放 閱讀材料教學(xué)目標? 掌握指針的賦值、算術(shù)運算、關(guān)系運算和指針值的輸出? 掌握用指針訪問一維數(shù)組、二維數(shù)組和字符數(shù)組元素的方法? 掌握指針數(shù)組、指向一維數(shù)組的指針和指向指針的指針的定義和使用? 掌握數(shù)組做函數(shù)參數(shù)、指針數(shù)組做函數(shù)參數(shù)的定義和使用? 掌握指向函數(shù)的指針的定義和使用? 掌握堆內(nèi)存的申請、釋放和使用? 了解 const 指針做函數(shù)參數(shù)的作用? 了解 void 類型的指針的定義和使用 指針的運算? 指針的運算: 賦值、關(guān)系、算術(shù)和強制類型轉(zhuǎn)換。? 指針的賦值: 將一個指針賦給一個指針變量。合法的指針值是正確使用指針的基礎(chǔ)。? 只能將同類型變量的指針賦給指針變量。設(shè):int a=1,*p1,*p2。p1=amp。a。 /* 將變量 a 的指針賦給 p1*/p2=p1。 /* 同類型指針變量之間的賦值 */使指針變量 p1 和 p2 都指向變量 a , 如圖所示。*p1 = *p1 +2。使 p1 所指變量 ( a) 的值為 3 。p1=amp。aa=1p2=p1空指針? 空指針: 0 或 NULL 。 空指針不指向任何變量。? 空指針變量: 值為空指針的指針變量。? 不允許對空指針變量所指內(nèi)存做讀寫操作 。如:int *p=0。 /* 空指針 */* p=100。 /* 但運行時出錯并終止執(zhí)行 */? 如何避免上述錯誤: 在指針變量操作前,先判斷其值是否為 0 來判斷它所指內(nèi)存的合法性:int* p=0。 /* 空指針 */if(p) *p=100。 else printf(p 為空指針! \ n)。? 靜態(tài)存儲種類的指針變量,其缺省的初值為 0 。指針的強制類型轉(zhuǎn)換? 可將整型常量轉(zhuǎn)換成指針后賦給指針變量:int *p= (int*)0x7fffff 。? 用這種方法為指針變量賦值,僅在程序員對內(nèi)存的 分和使用有明確的約定時才有意義,否則可能產(chǎn)生嚴 重果。不建議初學(xué)者使用。? 不同類型的指針變量間的賦值,需轉(zhuǎn)換成同一類型后方可,但應(yīng)有明確的目的和意義。float x=,*fp=amp。x。int *ip= (int*) fp。printf(*fp= %g ,*ip= %d \ n, *fp , *ip )。運行結(jié)果為:* fp= , *ip=1075838976? 取 ip 所指變量時,按整數(shù)格式解釋,輸出整數(shù) 1075838976 ,而不是浮點數(shù) 。? 取 fp 所指變量時,按實數(shù)格式解釋,輸出 。實數(shù)格式參見附錄 C 。隨機指針變量? 隨機指針變量: 未初始化的指針變量。 對隨機指針變量所指存儲單元賦值是極其危險的 。例如:int*p。printf( 輸入一個整數(shù) :)。scanf(%d, p )。printf(%d \ n,*p)。? 潛在問題: 用 VC++ 編譯時發(fā)現(xiàn),該行有警告 warning C4700: local variable 39。 p 39。 used without having been initialized 。? 重視警告: 把警告視為錯誤,以彌補編程時的疏忽。? 程序段在 VC++ 中雖能編譯和鏈接,但執(zhí) 行時,有時出錯,有時正 常,說明程序存在潛在問題。? 注意: p 為局部變量,系統(tǒng)為它分配內(nèi)存時 ,其值隨機。即 p 所指存儲單元可能未分配,也可 能已分配;若是后者,把 數(shù)據(jù)寫入 p 所指存儲單元,輕者運行出錯,重者系 統(tǒng)出錯或崩潰。? 設(shè)有以下定義:int a[6]={10,20,30,40,50,60},*p1=amp。a[0],*p2=amp。a[5]。? 指針變量執(zhí)行 ++ 或 操作: 使指針變量指向下一個或上一個變量。例如:p1++。 p2 。則 p1 指向數(shù)組元素 a[1] , p2 指向數(shù)組元素 a[4] 。? 指針變量加或減一個整型值 n : 使指針變量指向其后或 其的第 n 個變量。例如:p1+=2。 /* 設(shè)此前 p1 指向 a[0]*/則 p1 指向數(shù)組元素 a[2] 。? 兩個同類型指針值相減: 代表兩個指針間的變量個數(shù)。主要用于數(shù)組。例如:p2 p1。 /* 設(shè)此前 p1 指向 a[0] , p2 指向 a[5]*/則值為 5 ,即指針 p2 與 p1 之間的整型元素個數(shù)為 5 。指針的算術(shù)運算? 關(guān)系運算均可用于指針: 通常只有同類型的指針比較才有意義,比較時依據(jù)的是指針值大小 ( 作為無符號整數(shù) ) 。? 相等比較:判斷兩個指針是否指向相同的變量? 不等比較:判斷兩個指針是否指向不同的變量? 與 0 比較:判斷指針值是否為空? 指針的關(guān)系運算主要用于數(shù)組。 例如:int a[5]={10,20,30,40,50},*p1,*p2,sum=0。for(p2=amp。a[0]。 p2=amp。a[4] 。p2++)printf(%d \ t,*p2)。p1=amp。a[0]+5。 p2=amp。a[0]。while( p2!=p1 ) /* 此處條件還可為: p2p1 */sum+= *p2++ 。 /* 等價于: sum+=*p2,p2++。*/printf( \ n 元素之和為: % d \ n,sum)。指針的關(guān)系運算? ++ 、 、 取變量運算符 * 和取指針運算符 amp。 的優(yōu)先級相同,按自右向左的方向結(jié)合。設(shè)有說明:int a[5]={10,20,30,40,50},*p=amp。a[0],b。? amp。* p : 先做 * 運算,再做 amp。 運算。? *amp。 a[0] : 先做 amp。 運算,再做 * 運算 。? p=amp。a[0],b=*p++ : 對于 * p++ , 先做 ++ ,再做 * ,因 ++ 為后置運算,故等價于先取 * p ,再使指針 p 加 1 。? p=amp。a[0],b=*++p : 對于 *++ p , 先做 ++ ,再做 * ,因 ++ 是前置運算,故先使指針 p 加 1 ,再取 * p 。? p=amp。a[0],b=(*p)++ : 先取 * p ,再使 * p 加 1 。? *( p++) : *(p++) 等價于 * p++ 。? p=amp。a[1],b=++*p : ++* p 等價于 ++(* p) 。* 、 amp。 、 ++ 、 混合運算? 指針變量的值使用 % p 格式輸出,其值為十六進制數(shù) 。例如,下列程序片段:int i=10,*pi=amp。i。char c[]=abcd,*pc=amp。c[0]。/* 分別輸出 pi 所指變量的值和 pi 的值 */printf(*pi=%d \ tpi=%p,*pi,pi)。/* 分別輸出 pc 所指字符、 pc 本身和 pc 所指字符串 */printf( \ n*pc=%c \ tpc=%p \ tc[]=%s \ n,*pc,pc,pc)。? 一次運行結(jié)果:* pi=10 pi=0022FF4C*pc=a pc=0022FF30 c[]=abcd? 結(jié)果說明:因 pi 和 pc 的內(nèi)存由系統(tǒng)分配,故讀者上機運行上述程序段時,輸出的 pi 和 pc 的值可能有所不同。指針值的輸出 指針與數(shù)組? 指針與數(shù)組關(guān)系密切,可用指針訪問數(shù)組中任一元素。? 用指針訪問數(shù)組,可使程序緊湊,運行速度提高。? C 語言規(guī)定,在說明一個數(shù)組后, 該數(shù)組名便作為一個常量指針 來使用,其值為該數(shù)組在內(nèi)存中的起始地址,即數(shù)組的第 0 個元素的起始地址;其型是該數(shù)組元素類型。案例 用指針訪問一維數(shù)組元素? 問題描述: 下列程序演示了用指針變量訪問數(shù)組元素的各種方法,試分析這些訪問方法的效率。includeint main(void){ int a[6],i,*p。for( p=a ,i=0。i6。i++, p++ )/* 指針變量法初始化數(shù)組 a*/*p=i 。/* 輸出 a 數(shù)組的所有元素,有以下三類四種方法: */for( p=a ,i=0。i6。i++) /* ① 指針變量法 */printf(a[%d]=%d \ t,i,* p++ )。for(printf( \ n), p=a ,i=0。i6。i++)/* ② 指針常量法 */printf(a[%d]=%d \ t,i,*( p+i ))。案例 用指針訪問一維數(shù)組元素 ( 續(xù) 1)for(printf( \ n),i=0。i6。i++) /* ③ 指針常量法 */printf(a[%d]=%d \ t,i,*( a+i ))。for(printf( \ n),i=0。i6。i++) /* ④ 下標法 */printf(a[%d]=%d \ t,i, p[i] )。printf( \ n)。return 0。}? 程序運行結(jié)果:a[0]=0 a[1]=1 a[2]=2 a[3]=3 a[4]=4 a[5]=5a[0]=0 a[1]=1 a[2]=2 a[3]=3 a[4]=4 a[5]=5a[0]=0 a[1]=1 a[2]=2 a[3]=3 a[4]=4 a[5]=5a[0]=0 a[1]=1 a[2]=2 a[3]=3 a[4]=4 a[5]=5? 問題分析: 由源程序和程序的運行結(jié)果可見? 設(shè) p=a , 則 p+i 、 a+i 、 amp。a[i] 均為 a[i] 的 指 針 ;*( p+i) 、 *(a+i) 、 p[i] 和 *amp。 a[i] 均為 a[i] 。? 訪問數(shù)組 a 中元素的方法:指針變量法: p++ 等價于 p=p+4 。 效率最高!指針常量法: p+i 等價于 p+i*4 , a+i 等價于 a+i*4下標法: p[i] 等價于 *( p+i)? 問題思考:? C 語言數(shù)組下標從 0 開始是為了提高運行效率。? C 語言不對數(shù)組下標和指針越界做檢查,也是為了提高運行效率。 故編程者應(yīng)關(guān)注下標和指針是否越界。案例 用指針訪問一維數(shù)組元素 ( 續(xù) 2)案例 用指針訪問二維數(shù)組元素? 問題描述: 研究使用指針訪問二維數(shù)組任一元素的方法。? 問題分析:? 將二維數(shù)組做為一維數(shù)組使用: 因二維數(shù)組元素在內(nèi)存中按行逐列連續(xù)存放,故可將二維數(shù)組 分配的連續(xù)內(nèi)存作為一維數(shù)組使用。例如:int a[3][3]={{1,2,3},{4,5,6},{7,8,9}},i,j,* p 。for( p=amp。a[0][0] ,i=0。i3。i++,printf( \ n))for(j=0。j3。j++,printf( \ t))printf(%d, *(p+3*i+j) )。/*printf(%d, *p++ )。*/? 常量指針法: a[i][j] 的指針為p+3*i+j , 但算式復(fù)雜、運行效率低且未充分體現(xiàn)二維數(shù)組的特點。? 變量指針法:運行效率高,但未體現(xiàn)二維數(shù)組的特點。? 指針與二維數(shù)組的關(guān)系:int a[3][3]={{1,2,3},{4,5,6},{7,8,9}}。 ? 可將二維數(shù)組的一行看成一個元素,即數(shù)組 a 是包含三個元素 a[0] 、 a[1] 、 a[2] 的一維數(shù)組, a 、 a+1 、 a+2 分別是元素 a[0] 、 a[1] 和 a[2] 的指針。如圖 ( a) 所示。? 因 a[0] 又是一維數(shù)組,包含元素 a[0][0] 、 a[0][1] 、a[0][2] , 故 a[0] 、 a[0]+1 、 a[0]+2 分別是 a[0][0] 、a[0][1] 和 a[0][2] 的指針,如圖 ( b) 所示。案例 用指針訪問二維數(shù)組元素 ( 續(xù) 1)? 指針與二維數(shù)組的關(guān)系可用下圖概括:? 行指針: 行方向的指針 a 、 a+1 和 a+2 ,是指向一維數(shù)組的指針,其類型為含有三個整型元素的一維數(shù)組;案例 用指針訪問二維數(shù)組元素 ( 續(xù) 2)? 列指針: 列方向的指針 a[0] 、 a[0]+1 、a[0]+2 、 … 、a[2]+2 ,其指針類型為整型。? 注意: 盡管 a 與 a[0] 、a+1 與 a[1] 、 a+2 與a[2] 的值相同
點擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫吧 www.dybbs8.com
公安備案圖鄂ICP備17016276號-1