版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、C語言剖析總結(jié)C語言-總結(jié)第第1章章 C語言概述語言概述計(jì)算機(jī)科學(xué):信息在計(jì)算機(jī)內(nèi)使用數(shù)據(jù)來表示, 研究信息表示 和信息處理。數(shù)據(jù):是用以描述客觀事物的數(shù)值、字符,以及一切可以輸入到 計(jì)算機(jī)中并由計(jì)算機(jī)程序加以處理的符號的集合。問題 數(shù)學(xué)模型 算法 程序 測試 計(jì)算計(jì)算機(jī)解題過程 程序設(shè)計(jì)語言程序設(shè)計(jì)語言 高級語言程序調(diào)試過程高級語言程序調(diào)試過程機(jī)器語言 符號語言 匯編語言 高級語言源程序 目標(biāo)程序編 譯連 接filename.cfilename.cppfilename.exefilename.dllfilename.obj開開 始始編編 輯輯編編 譯譯連連 接接執(zhí)執(zhí) 行行有有 錯(cuò)錯(cuò) ?結(jié)果結(jié)
2、果正確正確結(jié)結(jié) 束束源程序f.c目標(biāo)程序f.obj庫函數(shù)其它目標(biāo)程序可執(zhí)行程序f.exe有有不正確不正確無無正確正確圖圖1.1庫函數(shù)其它目標(biāo)程序F1n.objC語言特點(diǎn)語言特點(diǎn) 1、語言簡潔、緊湊,使用方便靈活 2、運(yùn)算符豐富運(yùn)算符豐富 3、數(shù)據(jù)結(jié)構(gòu)豐富,具有現(xiàn)代化語言的各總數(shù)據(jù)結(jié)構(gòu) 4、具有結(jié)構(gòu)化的控制語句 5、語法限制不太嚴(yán)格,程序設(shè)計(jì)自由度大語法限制不太嚴(yán)格,程序設(shè)計(jì)自由度大 6、C語言允許直接訪問物理地址,能進(jìn)行位操作語言允許直接訪問物理地址,能進(jìn)行位操作 可實(shí)現(xiàn)匯編語言的大部分功能可實(shí)現(xiàn)匯編語言的大部分功能 7、生成目標(biāo)代碼的質(zhì)量高,程序執(zhí)行效率高 8、程序可執(zhí)行性好C語言程序結(jié)構(gòu)語
3、言程序結(jié)構(gòu)1.C程序是由函數(shù)構(gòu)成的。一個(gè)C源程序至少包含一個(gè)主函數(shù)(main或主程序)和若干個(gè)其它函數(shù)(子函數(shù)或子程序)2.一個(gè)函數(shù)由兩部分程序組成:說明部分和函數(shù)體3.一個(gè)C程序總是從main函數(shù)開始執(zhí)行,不論main函數(shù)放在程序中的什么位置。程序的流程是通過主函數(shù)main調(diào)用其它子函數(shù),或子函數(shù)間的相互調(diào)用4.C程序書寫格式自由,一行內(nèi)可以寫多條語句,但每一語句必須用分號(“;”)結(jié)束5.C語言本身沒有輸入/輸出語句,而是用函數(shù)完成相應(yīng)操作6.可以用/* , */在程序的任何部分做注釋算法(算法(Algorithm) 是對特定問題求解步驟的一種描述,它是指令(規(guī)則)的 有限序列,其中每一條
4、指令表示一個(gè)或多個(gè)操作。 “好好”的算法的標(biāo)準(zhǔn)的算法的標(biāo)準(zhǔn) 正確性,算法能滿足具體問題的需求 可讀性,首先方便閱讀與交流,其次才是機(jī)器執(zhí)行 健壯性,輸入錯(cuò)誤時(shí),能作出反應(yīng),避免異常出錯(cuò) 效率與低存儲量要求算法的特征算法的特征 有窮性、確定性、輸入、輸出、有效性第第2章章 算法算法 Algorithm對算法對算法“正確性正確性”的要求的要求 不含語法錯(cuò)誤; 對于幾組輸入數(shù)據(jù)能得到滿足要求的結(jié)果; 對精心選擇苛刻并帶有刁難的數(shù)據(jù)能得到滿足要求的結(jié)果; 對于一切合法的輸入均得到滿足要求的結(jié)果;算法描述算法描述 自然語言;程序設(shè)計(jì)語言;類語言; 流程圖: Programming = Algorithm
5、 + Data Structure 程序設(shè)計(jì) = 算法 + 數(shù)據(jù)結(jié)構(gòu)問題總是先于算法問題總是先于算法程序設(shè)計(jì)的四個(gè)里程碑程序設(shè)計(jì)的四個(gè)里程碑 子程序、高級語言、結(jié)構(gòu)程序設(shè)計(jì)、面向?qū)ο?OOP)結(jié)構(gòu)程序設(shè)計(jì)結(jié)構(gòu)程序設(shè)計(jì) 限制使用GO TO語句(基于三種基本結(jié)構(gòu)) 逐步求精的設(shè)計(jì)方法 自頂向下的設(shè)計(jì)、編碼與調(diào)試 主程序員組的組織形式問題解決問題的算法實(shí)現(xiàn)算法的程序三種基本結(jié)構(gòu)ABpABAP順序結(jié)構(gòu)順序結(jié)構(gòu)選擇結(jié)構(gòu)選擇結(jié)構(gòu)循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)PA成立成立PA不成立不成立常量常量符號常量#define PRICE 30#define MAX 1000Total = num*PRICE ;Area = PI
6、*R*R ;Int xMAX ;變量變量變量名 變量名命名規(guī)則變量是有類型的數(shù)據(jù)類型數(shù)據(jù)類型:變量的取值范圍和所允許操作的集合第第3章章 數(shù)據(jù)類型、運(yùn)算符與表達(dá)式數(shù)據(jù)類型、運(yùn)算符與表達(dá)式3a變量名變量值存儲單元變量的存儲類型變量的存儲類型 變量的數(shù)據(jù)類型變量的數(shù)據(jù)類型 變量名變量名變量說明:先定義,后引用變量說明:先定義,后引用標(biāo)識符命名規(guī)則intfloatcharPointer to arraystructautostaticregisterextern變量的:有效范圍作用時(shí)間變量的:取值范圍操作數(shù)據(jù)類型數(shù)據(jù)類型基本類型基本類型構(gòu)造類型構(gòu)造類型指針類型指針類型空空 類類 型型整形整形int字
7、符型字符型char實(shí)型(浮點(diǎn)型)實(shí)型(浮點(diǎn)型)float枚舉類型枚舉類型數(shù)組數(shù)組array結(jié)構(gòu)體結(jié)構(gòu)體struct共用體共用體uninIntLong int Short int Unsigned int Unsigned short intUnsigned long int 注意:每種類型數(shù)據(jù)的取值范圍注意:每種類型數(shù)據(jù)的取值范圍Int :-2bits-1 (2bits-1-1)Unsigned :0 (2bits-1)Float :10-38 1038Double :10-308 10308運(yùn)算符運(yùn)算符0、賦值運(yùn)算:、賦值運(yùn)算: =1、算術(shù)運(yùn)算符:、算術(shù)運(yùn)算符: + * / %2、關(guān)系運(yùn)算符
8、:、關(guān)系運(yùn)算符: = = !=3、邏輯運(yùn)算符:、邏輯運(yùn)算符: ! & |4、位運(yùn)算符:、位運(yùn)算符: - | &5、賦值運(yùn)算符:、賦值運(yùn)算符: = += = *= /= 6、條件運(yùn)算符:、條件運(yùn)算符: ? :7、逗號運(yùn)算符:、逗號運(yùn)算符: ,8、指針運(yùn)算符:、指針運(yùn)算符: * &9、求字節(jié)數(shù)運(yùn)算符:、求字節(jié)數(shù)運(yùn)算符: sizeof10、強(qiáng)制類型轉(zhuǎn)換:、強(qiáng)制類型轉(zhuǎn)換: (類型類型)11、分量運(yùn)算符:、分量運(yùn)算符: . -12、下標(biāo)運(yùn)算符:、下標(biāo)運(yùn)算符: 13、其他、其他: 三三優(yōu)先級優(yōu)先級類型轉(zhuǎn)換類型轉(zhuǎn)換表達(dá)式表達(dá)式算術(shù)表達(dá)式:算術(shù)表達(dá)式: 算術(shù)運(yùn)算符算術(shù)運(yùn)算符關(guān)系表達(dá)式:關(guān)系表達(dá)式: 關(guān)系運(yùn)算符
9、關(guān)系運(yùn)算符邏輯表達(dá)式;邏輯表達(dá)式; 邏輯運(yùn)算符邏輯運(yùn)算符賦值表達(dá)式:賦值表達(dá)式: 變量變量 = 表達(dá)式表達(dá)式逗號表達(dá)式:逗號表達(dá)式: 表達(dá)式表達(dá)式1,表達(dá)式,表達(dá)式2,表達(dá)式,表達(dá)式n條件表達(dá)式:條件表達(dá)式: 表達(dá)式表達(dá)式1?表達(dá)式?表達(dá)式2:表達(dá)式:表達(dá)式3混合運(yùn)算混合運(yùn)算doublelongunsignedint低高floatChar,short第第4章章 最簡單的最簡單的C程序設(shè)計(jì)程序設(shè)計(jì)順序程序設(shè)計(jì)順序程序設(shè)計(jì)C程序源程序文件1源程序文件2源程序文件3預(yù)處理命令全局變量聲明函數(shù)1函數(shù)n函數(shù)首部函 數(shù) 體局部變量聲明執(zhí)行語句C語句語句1、控制語句 if三 else for三 while三
10、 dowhile三 continue break switch goto return2、函數(shù)調(diào)用3、表達(dá)式語句4、空語句5、復(fù)合語句賦值語句賦值語句輸入輸入/輸出語句綜述輸出語句綜述輸入:從鍵盤或文件鍵入或讀入數(shù)據(jù),輸入:從鍵盤或文件鍵入或讀入數(shù)據(jù), 并將數(shù)據(jù)賦給程序中的變量。并將數(shù)據(jù)賦給程序中的變量。輸出:將程序中變量的值顯示在顯示器上,輸出:將程序中變量的值顯示在顯示器上, 或?qū)懭氲轿募?,或在打印機(jī)上打印。或?qū)懭氲轿募?,或在打印機(jī)上打印。C語言中的輸入語言中的輸入/輸出輸出1、字符輸入/輸出 putchar( chr ) chr = getchar( ) 文件的字符輸入/輸出 fpu
11、tc( chr , fp ) chr = fgetc( fp )2、字符串輸入/輸出 puts( str ) gets( str ) 文件的字符串輸入/輸出 fputs( strr , fp ) fgets( str , n , fp )3、格式輸入/輸出 printf( 格式控制,輸出表列 ) scanf( 格式控制,地址表列 ) 文件的格式輸入/輸出 fprintf(文件變量,格式控制,輸出表列) fscanf(文件變量,格式控制,地址表列 )Printf(“Format”,表達(dá)式1,表達(dá)式2,)Scanf(“Format”, &變量名1,&變量名2 ,)格式控制格式控制(Format)整
12、 形 實(shí) 型 字符型 char %c %-nc字符串 char c1MAX %s %-ns4、塊數(shù)據(jù)的輸入/輸出 fread( buffer , size , count , fp ) fwrite( buffer , size , count , fp )Char str20;Char str20;sprintf ( str ,sprintf ( str ,格式控制,變量列表格式控制,變量列表 ) ;) ;Turbo C 函數(shù)系統(tǒng)自動(dòng)打開和關(guān)閉三個(gè)標(biāo)準(zhǔn)文件系統(tǒng)自動(dòng)打開和關(guān)閉三個(gè)標(biāo)準(zhǔn)文件標(biāo)準(zhǔn)輸入標(biāo)準(zhǔn)輸入-鍵盤鍵盤 stdinstdin標(biāo)準(zhǔn)輸出標(biāo)準(zhǔn)輸出-顯示器顯示器 stdoutstdout標(biāo)準(zhǔn)
13、出錯(cuò)輸出標(biāo)準(zhǔn)出錯(cuò)輸出-顯示器顯示器 stderrstderrfpringtf(stdout, “x=%d,y=%fn” , x , y) ;pringtf(“x=%d,y=%fn” , x , y) ;第第5章章 選擇結(jié)構(gòu)程序設(shè)計(jì)選擇結(jié)構(gòu)程序設(shè)計(jì)算術(shù)運(yùn)算 關(guān)系運(yùn)算 邏輯運(yùn)算 邏輯常量例:a&b&ca|b|c當(dāng)a=1,b=2,c=3,d=4時(shí) (m=ab)&(n=cd) 執(zhí)行后m、n=? (m=ad) 執(zhí)行后m、n=?ab!a!ba&ba|b真真假假真假真假假假真真假真假真真假假假真真真假ab !a!ba&ba|b110010100011010110001110真值表真值表?xiàng)l件語句:條件語句:三
14、種格式: if三 if三 else else if條件表達(dá)式: 表達(dá)式1?表達(dá)式2:表達(dá)式3條件運(yùn)算: 變量 =表達(dá)式1?表達(dá)式2:表達(dá)式3Switch第第6章章 循環(huán)控制循環(huán)控制循環(huán)類型:“當(dāng)”型 “直到”型 計(jì)數(shù)while三 dowhile三for(表達(dá)式1;表達(dá)式2;表達(dá)式3)Break:結(jié)束循環(huán)Continue:結(jié)束本次循環(huán),進(jìn)入下一次循環(huán)用流程圖表示各種循環(huán)結(jié)構(gòu)用流程圖表示各種循環(huán)結(jié)構(gòu)表達(dá)式1表達(dá)式2下一條語句假真真假break表達(dá)式1表達(dá)式2下一條語句假真真假continue第第7章章 數(shù)數(shù) 組組一維數(shù)組二維數(shù)組數(shù)組下標(biāo)變量維數(shù)數(shù)組名數(shù)組名 數(shù)組類型數(shù)組類型 元素個(gè)數(shù)元素個(gè)數(shù) 下標(biāo)
15、范圍下標(biāo)范圍先定義后使用原則先定義后使用原則數(shù)組的內(nèi)存存儲結(jié)構(gòu)數(shù)組的內(nèi)存存儲結(jié)構(gòu)數(shù)組長度初始化初始化數(shù)組與指針數(shù)組與指針地址常量相同類型元素組成的集合相同類型元素組成的集合概述函數(shù)分類函數(shù)結(jié)構(gòu)函數(shù)的參數(shù)和函數(shù)的值函數(shù)的調(diào)用被調(diào)用函數(shù)的聲明和函數(shù)原型函數(shù)的嵌套調(diào)用函數(shù)的遞歸調(diào)用函數(shù)與數(shù)組存儲類型函數(shù)的指針和指向函數(shù)的指針變量簡介指針數(shù)組與主函數(shù)main( )的形參第第 8章章 函數(shù)函數(shù) C程序是由函數(shù)構(gòu)成的!程序是由函數(shù)構(gòu)成的!C程序程序源程序文件源程序文件1源程序文件源程序文件2源程序文件源程序文件3預(yù)處理命令預(yù)處理命令全局變量聲明全局變量聲明函數(shù)函數(shù)1函數(shù)函數(shù)n函數(shù)首部函數(shù)首部函函 數(shù)數(shù) 體
16、體局部變量局部變量聲明聲明執(zhí)行語句執(zhí)行語句函數(shù)分類1:定義的角度看,函數(shù)可分為 庫函數(shù)庫函數(shù)和用戶定義函數(shù)用戶定義函數(shù)函數(shù)分類函數(shù)分類函數(shù)分類2:從調(diào)用角度,可分為 有返回值函數(shù)有返回值函數(shù)和無返回值函數(shù)無返回值函數(shù)函數(shù)分類3:參數(shù)傳遞角度,可分為 無參函數(shù)無參函數(shù)和有參函數(shù)有參函數(shù)函數(shù)分類4:從功能功能角度,可分為:字符串、字符串、 轉(zhuǎn)換、目錄路徑、診斷圖形轉(zhuǎn)換、目錄路徑、診斷圖形I/O函數(shù)、接口、內(nèi)存管理、日期和時(shí)函數(shù)、接口、內(nèi)存管理、日期和時(shí)間、數(shù)學(xué)、進(jìn)程等間、數(shù)學(xué)、進(jìn)程等 存儲類型存儲類型 返值類型返值類型 函數(shù)名函數(shù)名( 形式參數(shù)表列形式參數(shù)表列 ) 聲明部分聲明部分(局部變量說明局
17、部變量說明) 語句部分(完成函數(shù)的功能)語句部分(完成函數(shù)的功能) exit(0) return; / return三三; / return() / return 函數(shù)的結(jié)構(gòu)函數(shù)的結(jié)構(gòu)autostaticregisterexternInt , float , charPointer to Structvoid類型變量指針數(shù)組結(jié)構(gòu)體函數(shù)存儲類型存儲類型 返值類型返值類型 函數(shù)名函數(shù)名( 形式參數(shù)表列形式參數(shù)表列 )標(biāo)識符命名規(guī)則intfloatcharpointerarrayStructvoidautostaticregisterextern變量的:有效范圍作用時(shí)間變量的:取值范圍操作 類型變量
18、 指針變量 數(shù)組 結(jié)構(gòu)體 函數(shù)函數(shù)的調(diào)用函數(shù)的調(diào)用 函數(shù)調(diào)用的一般形式函數(shù)調(diào)用的一般形式 函數(shù)名函數(shù)名(實(shí)際參數(shù)表實(shí)際參數(shù)表) ; 函數(shù)表達(dá)式函數(shù)表達(dá)式 例如:z=max(x,y) 函數(shù)語句函數(shù)語句 例如: printf (%d,a);scanf (%d,&b); 函數(shù)實(shí)參函數(shù)實(shí)參 例如: printf(“%d”,max(x,y); 常量 表達(dá)式 數(shù)組元素 類型變量 指針變量 數(shù)組 結(jié)構(gòu)體 函數(shù)被調(diào)用函數(shù)的聲明和函數(shù)原型被調(diào)用函數(shù)的聲明和函數(shù)原型 其一般形式為:其一般形式為: 類型說明符類型說明符 被調(diào)函數(shù)名被調(diào)函數(shù)名( (類型類型 形參,類型形參,類型 形參形參); 或?yàn)椋夯驗(yàn)椋?類型說明符
19、類型說明符 被調(diào)函數(shù)名被調(diào)函數(shù)名( (類型,類型類型,類型); 原則:原則:先聲明,后使用 函數(shù)的嵌套調(diào)用函數(shù)的嵌套調(diào)用函數(shù)的遞歸調(diào)用函數(shù)的遞歸調(diào)用直接遞歸直接遞歸和和間接遞歸間接遞歸關(guān)于函數(shù)的處理結(jié)果:關(guān)于函數(shù)的處理結(jié)果:無數(shù)據(jù)返回?zé)o數(shù)據(jù)返回單值返回單值返回多值返回多值返回批量數(shù)據(jù)返回批量數(shù)據(jù)返回 調(diào)用函數(shù)調(diào)用函數(shù)被調(diào)用函數(shù)被調(diào)用函數(shù)結(jié)果結(jié)果數(shù)組作為函數(shù)參數(shù)數(shù)組作為函數(shù)參數(shù) 數(shù)組元素作為函數(shù)實(shí)在參數(shù),形參為變量 數(shù)組名作為函數(shù)參數(shù)(指針),形參為指針,但應(yīng)同 時(shí)傳送數(shù)組的長度例:float average( float array10 , int n ) float average( flo
20、at array , int n ) float average( float * array , int n)指針變量作為函數(shù)參數(shù)指針變量作為函數(shù)參數(shù)存儲類型存儲類型變量的數(shù)據(jù)類型:變量的取值范圍和允許的操作變量的存儲類型:變量的有效時(shí)間和作用范圍變量的存在時(shí)間變量的存在時(shí)間(1)全局變量(全局變量(global varible) 定義在所有函數(shù)體之外的變量。 定義位置:在程序中所有函數(shù)體之外; 有效范圍:在定義開始之后的所有函數(shù)中; 使用要求:不能與局部變量重名; 存在時(shí)間:從程序開始到程序結(jié)束。(2)局部變量(局部變量(local varible) 定義在所函數(shù)體內(nèi)的變量。 定義位置:在
21、某一函數(shù)體內(nèi)定義; 有效范圍:只在定義變量的函數(shù)中有效; 存在時(shí)間:函數(shù)調(diào)用時(shí)產(chǎn)生,函數(shù)結(jié)束后消失 使用特點(diǎn):局部變量的存在時(shí)間決定了不同函數(shù)中的局部變量 是互不干涉的,即使同名,也完全相互獨(dú)立。(3 3)外部變量()外部變量(Extern varibleExtern varible)變量的存儲類型:變量的存儲類型:auto static register extern1、自動(dòng)存儲類型、自動(dòng)存儲類型(auto)2、寄存器存儲類型、寄存器存儲類型(register)3、靜態(tài)存儲類型、靜態(tài)存儲類型(static)4、外部存儲類型、外部存儲類型(extern) 性能性能自動(dòng)變量自動(dòng)變量(局部變量)(
22、局部變量)外部變量外部變量(全局變量)(全局變量)靜態(tài)變量靜態(tài)變量寄存器變量寄存器變量外部外部內(nèi)部內(nèi)部生存期生存期與函數(shù)相同與函數(shù)相同與程序相同與程序相同程序程序程序程序函數(shù)函數(shù)多函數(shù)共享多函數(shù)共享否否可可可可否否否否多文件共享多文件共享否否可可否否否否否否定義式自動(dòng)初始化定義式自動(dòng)初始化否否000否否作用域作用域當(dāng)前函數(shù)當(dāng)前函數(shù)整個(gè)程序整個(gè)程序當(dāng)前程序當(dāng)前程序當(dāng)前函數(shù)當(dāng)前函數(shù)當(dāng)前函數(shù)當(dāng)前函數(shù)存儲變量的特征存儲變量的特征從作用于角度,分為局部變量和全局變量。從作用于角度,分為局部變量和全局變量。變量的作用域變量的作用域 存在時(shí)間存在時(shí)間 動(dòng)態(tài)存儲動(dòng)態(tài)存儲 靜態(tài)存儲靜態(tài)存儲靜態(tài)存儲:靜態(tài)存儲:靜
23、態(tài)局部變量(函數(shù)內(nèi)有效)靜態(tài)局部變量(函數(shù)內(nèi)有效)靜態(tài)外部變量(本文件內(nèi)有效)靜態(tài)外部變量(本文件內(nèi)有效)外部變量(其它文件可引用)外部變量(其它文件可引用)動(dòng)態(tài)存儲:動(dòng)態(tài)存儲:自動(dòng)變量(本函數(shù)內(nèi)有效)自動(dòng)變量(本函數(shù)內(nèi)有效)寄存器變量(本函數(shù)內(nèi)有效)寄存器變量(本函數(shù)內(nèi)有效)形式參數(shù)(本函數(shù)內(nèi)有效)形式參數(shù)(本函數(shù)內(nèi)有效)全局變量:全局變量:靜態(tài)外部變量(只限于本文件使用)靜態(tài)外部變量(只限于本文件使用)外部變量(非靜態(tài)的外部變量,允許其它文件使用)外部變量(非靜態(tài)的外部變量,允許其它文件使用)局部變量:局部變量:自動(dòng)變量,即動(dòng)態(tài)局部變量(離開函數(shù),值即消失)自動(dòng)變量,即動(dòng)態(tài)局部變量(離開函
24、數(shù),值即消失)靜態(tài)局部變量(離開函數(shù),值仍保留)靜態(tài)局部變量(離開函數(shù),值仍保留)寄存器變量(離開函數(shù),值即消失)寄存器變量(離開函數(shù),值即消失)(形式參數(shù)可定義為自動(dòng)變量和寄存器變量)(形式參數(shù)可定義為自動(dòng)變量和寄存器變量)關(guān)于作用域和生存期的概念:關(guān)于作用域和生存期的概念: 從前面敘述可以知道,對一個(gè)變量的性質(zhì)可以從兩個(gè)方面分析,一是從變量的作用從前面敘述可以知道,對一個(gè)變量的性質(zhì)可以從兩個(gè)方面分析,一是從變量的作用域,一是從變量值存在時(shí)間的長短,即生存期。域,一是從變量值存在時(shí)間的長短,即生存期。作用域:空間的角度作用域:空間的角度生存期:時(shí)間的角度生存期:時(shí)間的角度 如果一個(gè)變量在某個(gè)
25、文件或函數(shù)范圍內(nèi)是有效的,則稱該文件或函數(shù)為該變量的作如果一個(gè)變量在某個(gè)文件或函數(shù)范圍內(nèi)是有效的,則稱該文件或函數(shù)為該變量的作用域,在此作用域內(nèi)可以引用該變量,所以又稱變量在此作用域內(nèi)用域,在此作用域內(nèi)可以引用該變量,所以又稱變量在此作用域內(nèi)“可見可見”,這種性,這種性質(zhì)又稱為變量的質(zhì)又稱為變量的“可見性可見性” 。 如果一個(gè)變量值如果一個(gè)變量值i i在某一時(shí)刻是存在的,則認(rèn)為這一時(shí)刻屬于該變量的在某一時(shí)刻是存在的,則認(rèn)為這一時(shí)刻屬于該變量的“生存期生存期”,或稱該變量在此時(shí)刻,或稱該變量在此時(shí)刻“存在存在”。內(nèi)部函數(shù)與外部函數(shù)內(nèi)部函數(shù)與外部函數(shù)內(nèi)部函數(shù):一個(gè)函數(shù)只能被定義它的文件內(nèi)的其它函數(shù)
26、調(diào)用。 定義函數(shù)時(shí)加 static static 類型說明類型說明 函數(shù)名(形參表)函數(shù)名(形參表)外部函數(shù):一個(gè)函數(shù)可以被其它文件內(nèi)的函數(shù)調(diào)用。 定義函數(shù)時(shí)加 extern extern 類型說明類型說明 函數(shù)名(形參表)函數(shù)名(形參表)函數(shù)定義的完整格式: 存儲類型存儲類型 返回值數(shù)據(jù)類型返回值數(shù)據(jù)類型 函數(shù)名(形參表)函數(shù)名(形參表)使用內(nèi)部函數(shù)的好處是:不同的人編寫不同的函數(shù)時(shí),不用擔(dān)心自己定義的函數(shù),是否會與其它文件中的函數(shù)同名,因?yàn)橥矝]有關(guān)系。函數(shù)的指針和指向函數(shù)的指針變量簡介函數(shù)的指針和指向函數(shù)的指針變量簡介1、函數(shù)指針的概念 一個(gè)函數(shù)在編譯時(shí),被分配了一個(gè)入口地址,這個(gè)地址
27、就稱為該函數(shù)的指針。 可以用一個(gè)指針變量指向一個(gè)函數(shù),然后通過該指針變量調(diào)用此函數(shù)。2、指向函數(shù)的指針變量 (1)定義格式 函數(shù)返值類型函數(shù)返值類型 ( ( * *指針變量指針變量 )( )( ); 注意注意:“*指針變量”外的括號不能缺,否則成了返回指針值的函數(shù)。 例如,int (*fp)( ); /* fp為指向int函數(shù)的指針變量*/ (2)賦值 函數(shù)名代表該函數(shù)的入口地址??捎煤瘮?shù)名給指向函數(shù)的指針變量賦值。 指向函數(shù)的指針變量指向函數(shù)的指針變量 & & 函數(shù)名函數(shù)名; ; 注意注意:函數(shù)名后不能帶括號和參數(shù);函數(shù)名前的“&”符號是可選的。 (3)調(diào)用格式 ( (* *函數(shù)指針變量函數(shù)
28、指針變量)()(實(shí)參表實(shí)參表)3、指向函數(shù)的指針變量作函數(shù)參數(shù) 指向函數(shù)的指針變量的常用用途之一,就是將函數(shù)指針作參數(shù),傳遞到其它函 數(shù)。函數(shù)名作實(shí)參時(shí),因?yàn)橐笔±ㄌ柡蛥?shù),造成編譯器無法判斷它是一個(gè) 變量還是一個(gè)函數(shù),函數(shù)說明的格式與其他函數(shù)一樣。 注意注意:對指向函數(shù)的指針變量,諸如p+i、p+/p-等運(yùn)算是沒有意義的。第第 9章章 指針指針n指針的概念指針的概念n變量的指針和指向變量的指針變量變量的指針和指向變量的指針變量n數(shù)組的指針和指向數(shù)組的指針變量數(shù)組的指針和指向數(shù)組的指針變量n字符串的指針和指向字符串的指針變量字符串的指針和指向字符串的指針變量n函數(shù)的指針和指向函數(shù)的指針變量函
29、數(shù)的指針和指向函數(shù)的指針變量n返回指針值的函數(shù)返回指針值的函數(shù)n指針數(shù)組和指向指針的指針指針數(shù)組和指向指針的指針n指針型數(shù)據(jù)小結(jié)指針型數(shù)據(jù)小結(jié)指針的概念指針的概念指針就是地址。指針就是地址。 有變量的、數(shù)組的、函數(shù)的、字符串的指針等。有變量的、數(shù)組的、函數(shù)的、字符串的指針等。1 1、內(nèi)存的訪問方式、內(nèi)存的訪問方式 1)1)直接訪問直接訪問 2)2)間接訪問間接訪問2 2、指針的概念、指針的概念 一個(gè)變量的地址稱為該變量的一個(gè)變量的地址稱為該變量的“指針指針”。 存放地址的變量叫存放地址的變量叫“指針變量指針變量”。換句話說,指針變量存放地。換句話說,指針變量存放地址。址。變量的指針和指向變量的
30、指針變量變量的指針和指向變量的指針變量1 1、指針變量的定義、指針變量的定義 一般形式:一般形式: 類型標(biāo)識符類型標(biāo)識符 * *變量名;變量名; 2 2、指針變量的引用、指針變量的引用 1)給指針變量賦值 賦變量的地址 2)2)用指針變量對變量賦值用指針變量對變量賦值3 3、指針運(yùn)算、指針運(yùn)算重點(diǎn):指向數(shù)組元素的指針變量及其應(yīng)用重點(diǎn):指向數(shù)組元素的指針變量及其應(yīng)用 指向多維數(shù)組元素的指針變量及其應(yīng)用指向多維數(shù)組元素的指針變量及其應(yīng)用 指向一維數(shù)組的指針變量及其應(yīng)用指向一維數(shù)組的指針變量及其應(yīng)用難點(diǎn):多維數(shù)組的指針變量及其應(yīng)用難點(diǎn):多維數(shù)組的指針變量及其應(yīng)用 數(shù)組的指針是數(shù)組的起始地址,數(shù)組元素
31、的指針是元素的地址。數(shù)組的指針是數(shù)組的起始地址,數(shù)組元素的指針是元素的地址。 引用數(shù)組可以用下標(biāo)法,也可以用指針法,通過指向數(shù)組的元素引用數(shù)組可以用下標(biāo)法,也可以用指針法,通過指向數(shù)組的元素的指針找到數(shù)組元素。的指針找到數(shù)組元素。使用指針法能使目標(biāo)程序占內(nèi)存少,運(yùn)行速度快。使用指針法能使目標(biāo)程序占內(nèi)存少,運(yùn)行速度快。數(shù)組的指針和指向數(shù)組的指針變量數(shù)組的指針和指向數(shù)組的指針變量1.概念概念 數(shù)組的指針數(shù)組的指針數(shù)組在內(nèi)存中的起始地址,數(shù)組元素的指針數(shù)組在內(nèi)存中的起始地址,數(shù)組元素的指針數(shù)組數(shù)組 元素在內(nèi)存中的起始地址。元素在內(nèi)存中的起始地址。2.指向數(shù)組的指針變量的定義指向數(shù)組的指針變量的定義
32、指向數(shù)組的指針變量的定義,與指向普通變量的指針變量的定義方法一樣。指向數(shù)組的指針變量的定義,與指向普通變量的指針變量的定義方法一樣。 例如,例如,int array10, *pointer=array( 或或 &array0 ); 或者:或者: int array10, *pointer; pointerarray; 注意:數(shù)組名代表數(shù)組在內(nèi)存中的起始地址注意:數(shù)組名代表數(shù)組在內(nèi)存中的起始地址,所以可以用數(shù)組名給指針變量賦值。所以可以用數(shù)組名給指針變量賦值。3.數(shù)組元素的引用數(shù)組元素的引用 數(shù)組元素的引用,既可用下標(biāo)法,也可用指針法。使用下標(biāo)法,直觀;而數(shù)組元素的引用,既可用下標(biāo)法,也可用指針
33、法。使用下標(biāo)法,直觀;而 使用指針法,能使目標(biāo)程序占用內(nèi)存少、運(yùn)行速度快。使用指針法,能使目標(biāo)程序占用內(nèi)存少、運(yùn)行速度快。1 1、指向數(shù)組元素的指針變量的定義與賦值、指向數(shù)組元素的指針變量的定義與賦值2 2、通過指針引用數(shù)組元素、通過指針引用數(shù)組元素 3 3、數(shù)組名作函數(shù)參數(shù)、數(shù)組名作函數(shù)參數(shù)指針變量作函數(shù)參數(shù)(形參)指針變量作函數(shù)參數(shù)(形參)形參和實(shí)參均數(shù)組形參和實(shí)參均數(shù)組 形參用數(shù)組而實(shí)參用指針形參用數(shù)組而實(shí)參用指針形參用指針而實(shí)參用數(shù)組形參用指針而實(shí)參用數(shù)組 形參和實(shí)參均用指針形參和實(shí)參均用指針傳遞的均是數(shù)組的首地址。傳遞的均是數(shù)組的首地址。第第i i行、第行、第j j列的元素表示方法:
34、列的元素表示方法: (1 1)下標(biāo)法:)下標(biāo)法:aijaij (2 2)用)用 ai+j ai+j 地址表示:地址表示: * *(ai+j ai+j ) (3 3)用)用* *(a+i)+j (a+i)+j 地址表示:地址表示: * *( (* *(a+i)+j )(a+i)+j )地址表示方法匯總:地址表示方法匯總:表示形式表示形式含義含義地址地址a二維數(shù)組名,數(shù)組首地址二維數(shù)組名,數(shù)組首地址2000a0,*(a+0),*a第第 0行第行第0列元素地址列元素地址2000a-1第第1行首地址行首地址2008a1,*(a+1)第第1行第行第0列元素地址列元素地址2008a1+2,*(a+1)+2
35、,&a12第第1行第行第2列元素地址列元素地址2012*(a1+2),*(*(a+1)+2),a12第第1行第行第2列元素的值列元素的值元素值為元素值為13 變量的指針只能存放變量的地址,而不能存放數(shù)組的地址,變量的指針只能存放變量的地址,而不能存放數(shù)組的地址,可定義數(shù)組的指針變量來存放數(shù)組的地址。可定義數(shù)組的指針變量來存放數(shù)組的地址。 定義的一般形式:定義的一般形式: 類型說明符類型說明符 ( (* *指針變量指針變量)數(shù)組長度數(shù)組長度 ; 如:如:int (int (* *p)4 p)4 p p為一指向具有為一指向具有4 4個(gè)整型元素的一維數(shù)組的指針變量個(gè)整型元素的一維數(shù)組的指針變量 (不
36、能寫成(不能寫成 * *p4, p4, 此為指針數(shù)組)此為指針數(shù)組)二維數(shù)組的指針及其指針變量:二維數(shù)組的指針及其指針變量:實(shí)參是地址或指針;形參有兩種形式:實(shí)參是地址或指針;形參有兩種形式: (1)用指向變量的指針變量,)用指向變量的指針變量, (2)用指向一維數(shù)組的指針變量。)用指向一維數(shù)組的指針變量。 多維數(shù)組的指針作為函數(shù)參數(shù)多維數(shù)組的指針作為函數(shù)參數(shù) 數(shù)組名作形參時(shí),接收實(shí)參數(shù)組的起始地址;作實(shí)參時(shí),將數(shù)組的數(shù)組名作形參時(shí),接收實(shí)參數(shù)組的起始地址;作實(shí)參時(shí),將數(shù)組的起始地址傳遞給形參數(shù)組。起始地址傳遞給形參數(shù)組。 引入指向數(shù)組的指針變量后,數(shù)組及指向數(shù)組的指針變量作函數(shù)引入指向數(shù)組的
37、指針變量后,數(shù)組及指向數(shù)組的指針變量作函數(shù)參數(shù)時(shí),可有種等價(jià)形式(本質(zhì)上是一種,即指針數(shù)據(jù)作函數(shù)參參數(shù)時(shí),可有種等價(jià)形式(本質(zhì)上是一種,即指針數(shù)據(jù)作函數(shù)參數(shù)):數(shù)):(1 1)形參、實(shí)參都用數(shù)組名)形參、實(shí)參都用數(shù)組名(2 2)形參、實(shí)參都用指針變量)形參、實(shí)參都用指針變量(3 3)形參用指針變量、實(shí)參用數(shù)組名)形參用指針變量、實(shí)參用數(shù)組名(4 4)形參用數(shù)組名、實(shí)參用指針變量)形參用數(shù)組名、實(shí)參用指針變量二維數(shù)組指針作函數(shù)參數(shù)二維數(shù)組指針作函數(shù)參數(shù) 二維數(shù)組的指針作函數(shù)實(shí)參時(shí),有列指針和行指針兩種形式。相應(yīng)的,二維數(shù)組的指針作函數(shù)實(shí)參時(shí),有列指針和行指針兩種形式。相應(yīng)的,用來接受實(shí)參數(shù)組指針
38、的形參,必須使用相應(yīng)形式的指針變量,如下所示:用來接受實(shí)參數(shù)組指針的形參,必須使用相應(yīng)形式的指針變量,如下所示: 實(shí)參:實(shí)參: 列指針列指針 行指針行指針 形參:形參: (列)指針變量(列)指針變量 行指針變量行指針變量字符串的指針和指向字符串的指針變量重點(diǎn):(重點(diǎn):(1)字符串指針的定義、)字符串指針的定義、 引用及作函數(shù)參數(shù);引用及作函數(shù)參數(shù); (2)字符串指針變量與)字符串指針變量與 字符數(shù)組的區(qū)別。字符數(shù)組的區(qū)別。1、字符串的表示形式、字符串的表示形式 1)用字符數(shù)組)用字符數(shù)組 char a 10=“CHINA” 2)用字符指針)用字符指針 char *string=“I love
39、China !”; IString0IString1lString2loString3ovString4veString5eString6CString7ChString8hiString9inString10naString11a!String12!0String130stringstring字符串指針作函數(shù)參數(shù):字符串指針作函數(shù)參數(shù): 參數(shù)是字符串或字符串指針,傳遞的是地址。在被調(diào)函數(shù)中改參數(shù)是字符串或字符串指針,傳遞的是地址。在被調(diào)函數(shù)中改變后,可在主調(diào)函數(shù)中得到改變后的數(shù)據(jù)。變后,可在主調(diào)函數(shù)中得到改變后的數(shù)據(jù)。用數(shù)組名、指針變量作函數(shù)參數(shù)的幾種組合:用數(shù)組名、指針變量作函數(shù)參數(shù)的幾種
40、組合: 數(shù)組名數(shù)組名 數(shù)組名數(shù)組名 數(shù)組名數(shù)組名 字符指針變量字符指針變量 字符指針變量字符指針變量 數(shù)組名數(shù)組名 字符指針變量字符指針變量 字符指針變量字符指針變量 雖二者均能實(shí)現(xiàn)對字符串的存儲和計(jì)算,但雖二者均能實(shí)現(xiàn)對字符串的存儲和計(jì)算,但: :字符數(shù)組由元素組成,元素中放字符;字符指針變量放地址(如字符串的字符數(shù)組由元素組成,元素中放字符;字符指針變量放地址(如字符串的首地址等);首地址等);賦初值的方式不同;對字符數(shù)組賦初值一般用賦初值的方式不同;對字符數(shù)組賦初值一般用static, static, 如如 static char str =“I love China!”; 而字符指針變
41、量賦初值一般不用而字符指針變量賦初值一般不用staticstatic,如:,如: char *p=“I love China!”;賦值方式不同;賦值方式不同;對字符數(shù)組要么賦初值(即定義時(shí)賦值),要么對元素賦值,下面的賦對字符數(shù)組要么賦初值(即定義時(shí)賦值),要么對元素賦值,下面的賦值方式是錯(cuò)誤的:值方式是錯(cuò)誤的: char str14; str14 =“I love China!”; 字符指針變量賦值一般可賦初值,或先定義后賦值,如字符指針變量賦值一般可賦初值,或先定義后賦值,如 char *a; a= “I love China!”; 等價(jià)于:等價(jià)于: char *a= “I love Ch
42、ina!”; 字符指針變量與字符數(shù)組字符指針變量與字符數(shù)組1、函數(shù)的指針及指向函數(shù)的指針變量、函數(shù)的指針及指向函數(shù)的指針變量 1)函數(shù)指針的概念函數(shù)指針的概念 一個(gè)函數(shù)在編譯時(shí)被分配一個(gè)入口地址,這個(gè)入口地址稱為函數(shù)的指一個(gè)函數(shù)在編譯時(shí)被分配一個(gè)入口地址,這個(gè)入口地址稱為函數(shù)的指針。針。 2)指向函數(shù)的指針變量指向函數(shù)的指針變量 定義的一般形式:定義的一般形式: 數(shù)據(jù)類型標(biāo)識符數(shù)據(jù)類型標(biāo)識符 (*指針變量名)講義指針變量名)講義重點(diǎn):函數(shù)指針的概念及指向函數(shù)的指針變量重點(diǎn):函數(shù)指針的概念及指向函數(shù)的指針變量 用指向函數(shù)的指針變量作函數(shù)參數(shù)用指向函數(shù)的指針變量作函數(shù)參數(shù)函數(shù)的指針和指向函數(shù)的指針
43、變量函數(shù)的指針和指向函數(shù)的指針變量2 2、用指向函數(shù)的指針變量作函數(shù)的參數(shù)、用指向函數(shù)的指針變量作函數(shù)的參數(shù) 傳遞的是函數(shù)的入口地址,一般的使用形式:傳遞的是函數(shù)的入口地址,一般的使用形式: : : sub( f1, f2); / sub( f1, f2); /* * 主調(diào)函數(shù)主調(diào)函數(shù)/ /* * : : sub(x1, x2) sub(x1, x2) int ( int (* *x1)( ), (x1)( ), (* *x2)( );x2)( ); int a,b,i,j; int a,b,i,j; : / : /* * 次主調(diào)函數(shù)次主調(diào)函數(shù)* */ / a=( a=(* *x1)(i);
44、/x1)(i); /* * x1 x1、x2x2為被調(diào)函數(shù)為被調(diào)函數(shù) * */ / b=( b=(* *x2)(i,j); x2)(i,j); : : f1函數(shù)f2函數(shù)f1x1f2x2存儲類別存儲類別 數(shù)據(jù)類型標(biāo)識符數(shù)據(jù)類型標(biāo)識符 * *函數(shù)名(形參表列)函數(shù)名(形參表列)形參說明形參說明 函數(shù)體函數(shù)體 如:如: int int * *a(x,y) /a(x,y) /* *存儲類別為外部函數(shù)存儲類別為外部函數(shù)* */ / int x,y ; int x,y ; 2 2、指針函數(shù)的應(yīng)用、指針函數(shù)的應(yīng)用 返回指針值的函數(shù)返回指針值的函數(shù)1、指針函數(shù)的定義、指針函數(shù)的定義指針數(shù)組和指向指針的指針指針
45、數(shù)組和指向指針的指針1 1、指針數(shù)組、指針數(shù)組 其元素均為指針型數(shù)據(jù)的數(shù)組,稱為指針數(shù)組。其元素均為指針型數(shù)據(jù)的數(shù)組,稱為指針數(shù)組。 定義形式:定義形式: 類型標(biāo)識符類型標(biāo)識符 * *數(shù)組名數(shù)組名 數(shù)組長度說明數(shù)組長度說明 如:如: int int * *p4;p4; 不能寫成不能寫成 int (int (* *p)4p)4 指針數(shù)組主要用于指向多個(gè)字符串,使字符串處理方便。指針數(shù)組主要用于指向多個(gè)字符串,使字符串處理方便。2、指向指針的指針、指向指針的指針 即指向指針數(shù)據(jù)的地址。即指向指針數(shù)據(jù)的地址。 定義形式:定義形式: 類型標(biāo)識符類型標(biāo)識符 * * 變量名變量名 如:如: char *P
46、; p為一個(gè)指向字符指針變量的指針變量。為一個(gè)指向字符指針變量的指針變量。 一般指向一數(shù)組的首地址。一般指向一數(shù)組的首地址。 如:如: char *name4, *p; p=name;Computer designname4FORTRANname3Great Wallname2BASICname1Follow mename0pname數(shù)組字符串20042000name3016間接訪問的間接訪問的“單級間址單級間址”和和“二級間址二級間址”用指針訪問便是間接訪問。用指針訪問便是間接訪問。若指針變量中存放的是目標(biāo)變量的地址,稱為若指針變量中存放的是目標(biāo)變量的地址,稱為“單級間址單級間址”,指向指針
47、,指向指針的指針為的指針為“二級間址二級間址”。還可以有多級間址。見下圖。還可以有多級間址。見下圖。地址地址地址地址1值值指針變量指針變量變量變量地址地址2值值地址地址1地址地址1地址地址1指針變量指針變量1指針變量指針變量2變量變量指針變量指針變量1指針變量指針變量2變量變量地址地址1指針變量指針變量n(a)(b)(c)1 1、有關(guān)指針的數(shù)據(jù)類型、有關(guān)指針的數(shù)據(jù)類型 定定 義義 含含 義義int i;定義整型變量定義整型變量int *p ;P為指向整型數(shù)據(jù)的指針變量為指向整型數(shù)據(jù)的指針變量int an;定義整型數(shù)組定義整型數(shù)組a,它有它有n個(gè)元素個(gè)元素int *pn;定義指針數(shù)組定義指針數(shù)組
48、p,它由,它由n個(gè)指向整型數(shù)據(jù)的指針元素組成個(gè)指向整型數(shù)據(jù)的指針元素組成int (*p)n;p為指向含為指向含n個(gè)元素的一維數(shù)組的指針變量個(gè)元素的一維數(shù)組的指針變量int f();f為帶回整型函數(shù)值的函數(shù)為帶回整型函數(shù)值的函數(shù)int *p();p為帶回一個(gè)指針的函數(shù),該指針指向整型數(shù)據(jù)為帶回一個(gè)指針的函數(shù),該指針指向整型數(shù)據(jù)int (*p)();p為指向函數(shù)的指針,該函數(shù)返回一個(gè)整型值為指向函數(shù)的指針,該函數(shù)返回一個(gè)整型值int *p;p是一個(gè)指針變量,它指向一個(gè)指向整型數(shù)據(jù)的指針變量是一個(gè)指針變量,它指向一個(gè)指向整型數(shù)據(jù)的指針變量指針型數(shù)據(jù)小結(jié)指針型數(shù)據(jù)小結(jié)2、指針運(yùn)算小結(jié)、指針運(yùn)算小結(jié) 1
49、)、指針變量加減一個(gè)整數(shù))、指針變量加減一個(gè)整數(shù) 如:p+ p- p+i p-i p+=i p-=i 等 實(shí)際含義如 p+i 代表地址計(jì)算: p+c*i , c為字節(jié)數(shù),整型c=2、 實(shí)型c=4、字符型c=1。 2)、指針變量賦值)、指針變量賦值 如:p=&a a為變量,p為指針變量 p=array array為數(shù)組名 p=&arrayi p=max max為函數(shù)名 p1=p2 p2為指針變量 注意:不能把一個(gè)整數(shù)或常數(shù)賦給p,如p=1000 同樣也不能把p賦給整型變量,如i=p 3)指針變量可以賦空值)指針變量可以賦空值 如: p=NULL; 實(shí)際NULL是整數(shù)0。 4)兩個(gè)指針變量可以相減
50、)兩個(gè)指針變量可以相減 如兩個(gè)指針變量指向同一個(gè)數(shù)組的元素(如右圖), 則 p2-p1=4-1=3 但p1+p2無意義。 5)兩個(gè)指針變量比較)兩個(gè)指針變量比較 若兩個(gè)指針指向同一個(gè)數(shù)組的元素,則可以比較, 如: p1p23、空類型指針、空類型指針 ANSI新標(biāo)準(zhǔn)增加了一種空類型指針,定義的一般形式為: void * 變量名變量名 具體使用時(shí)要做類型轉(zhuǎn)換,如: void *p; (int *)p;a5a4a3a2a1a0ap1p2動(dòng)態(tài)數(shù)組的實(shí)現(xiàn)動(dòng)態(tài)數(shù)組的實(shí)現(xiàn) 在程序運(yùn)行過程中,數(shù)組的大小是不能改變的。這種數(shù)組稱為靜態(tài)數(shù)組。靜態(tài)數(shù)組的在程序運(yùn)行過程中,數(shù)組的大小是不能改變的。這種數(shù)組稱為靜態(tài)數(shù)組
51、。靜態(tài)數(shù)組的缺點(diǎn)是:對于事先無法準(zhǔn)確估計(jì)數(shù)據(jù)量的情況,無法做到既滿足處理需要,又不浪費(fèi)內(nèi)存缺點(diǎn)是:對于事先無法準(zhǔn)確估計(jì)數(shù)據(jù)量的情況,無法做到既滿足處理需要,又不浪費(fèi)內(nèi)存空間??臻g。 所謂所謂動(dòng)態(tài)數(shù)組是指動(dòng)態(tài)數(shù)組是指,在程序運(yùn)行過程中,根據(jù)實(shí)際需要指定數(shù)組的大小。,在程序運(yùn)行過程中,根據(jù)實(shí)際需要指定數(shù)組的大小。 在在C C語言中,可利用內(nèi)存的申請和釋放庫函數(shù),以及指向數(shù)組的指針變語言中,可利用內(nèi)存的申請和釋放庫函數(shù),以及指向數(shù)組的指針變量可當(dāng)數(shù)組名使用的特點(diǎn),來實(shí)現(xiàn)動(dòng)態(tài)數(shù)組。量可當(dāng)數(shù)組名使用的特點(diǎn),來實(shí)現(xiàn)動(dòng)態(tài)數(shù)組。 動(dòng)態(tài)數(shù)組的本質(zhì)是動(dòng)態(tài)數(shù)組的本質(zhì)是:一個(gè)指向數(shù)組的指針變量一個(gè)指向數(shù)組的指針變量。
52、例例 動(dòng)態(tài)數(shù)組的實(shí)現(xiàn)方法實(shí)例動(dòng)態(tài)數(shù)組的實(shí)現(xiàn)方法實(shí)例#include “alloc.h”#include “stdlib.h”main三三 int *array=NULL, num, i; printf(“Input the number of element: ”); scanf(“%d”, &num); /*申請動(dòng)態(tài)數(shù)組使用的內(nèi)存塊申請動(dòng)態(tài)數(shù)組使用的內(nèi)存塊*/ array=(int *)malloc( sizeof(int) * num ); if(array=NULL ) /*內(nèi)存申請失?。禾崾荆顺鰞?nèi)存申請失?。禾崾?,退出*/ printf(“out of memory, press a
53、ny key to quit”); exit(0); /*exit三:終止程序運(yùn)行,返回操作系統(tǒng)三:終止程序運(yùn)行,返回操作系統(tǒng)*/ /*提示輸入提示輸入num個(gè)數(shù)據(jù)個(gè)數(shù)據(jù)*/ printf(“Input %d elements: ”, num); for (i=0; inum; i+) scanf(“%d”, &arrayi); /*輸出剛輸入的輸出剛輸入的num個(gè)數(shù)據(jù)個(gè)數(shù)據(jù)*/ printf(“%d elements are: ”, num); for (i=0; i成員名成員名結(jié)構(gòu)體變量名結(jié)構(gòu)體變量名.成員名成員名n指向結(jié)構(gòu)體數(shù)組的指針指向結(jié)構(gòu)體數(shù)組的指針n用指向結(jié)構(gòu)體的指針作函數(shù)參數(shù)用指
54、向結(jié)構(gòu)體的指針作函數(shù)參數(shù) 用結(jié)構(gòu)體變量的成員作參數(shù)用結(jié)構(gòu)體變量的成員作參數(shù)-值傳遞值傳遞 用指向結(jié)構(gòu)體變量或數(shù)組的指針作參數(shù)用指向結(jié)構(gòu)體變量或數(shù)組的指針作參數(shù)-地址傳遞地址傳遞 用結(jié)構(gòu)體變量作參數(shù)用結(jié)構(gòu)體變量作參數(shù)-多值傳遞,效率低多值傳遞,效率低共用體共用體構(gòu)造數(shù)據(jù)類型構(gòu)造數(shù)據(jù)類型,也叫聯(lián)合體也叫聯(lián)合體用途:使幾個(gè)不同類型的變量共占一段內(nèi)存用途:使幾個(gè)不同類型的變量共占一段內(nèi)存(相互覆蓋相互覆蓋)l 共用體類型定義共用體類型定義定義形式:定義形式:union 共用體名共用體名 類型標(biāo)識符類型標(biāo)識符 成員名;成員名; 類型標(biāo)識符類型標(biāo)識符 成員名;成員名; .;例例 union data in
55、t i; char ch; float f; ;fchi類型定義不分配內(nèi)存類型定義不分配內(nèi)存 形式一: union data int i; char ch; float f; a,b; 形式二: union data int i; char ch; float f; ; union data a,b,c,*p,d3; 形式三: union int i; char ch; float f; a,b,c;n共用體變量的定義共用體變量的定義fchifchiab共用體變量定義分配內(nèi)存,長度=最長成員所占字節(jié)數(shù)共用體變量任何時(shí)刻只有一個(gè)成員存在n共用體變量引用共用體變量引用 引用方式:引用方式: 引用規(guī)
56、則引用規(guī)則 不能引用共用體變量,只能引用其成員不能引用共用體變量,只能引用其成員共用體指針名共用體指針名-成員名成員名共用體變量名共用體變量名.成員名成員名(*共用體指針名共用體指針名).成員名成員名 共用體變量中起作用的成員是最后一次存放的成員共用體變量中起作用的成員是最后一次存放的成員 不能在定義共用體變量時(shí)初始化不能在定義共用體變量時(shí)初始化 可以用一個(gè)共用體變量為另一個(gè)變量賦值可以用一個(gè)共用體變量為另一個(gè)變量賦值n結(jié)構(gòu)體與共用體結(jié)構(gòu)體與共用體 區(qū)別: 存儲方式不同struct node char ch2; int k; a;union node char ch2; int k; b;ac
57、hkbch k變量的各成員同時(shí)存在任一時(shí)刻只有一個(gè)成員存在 聯(lián)系: 兩者可相互嵌套 typedef定義類型定義類型n 功能功能:用自定義名字為已有數(shù)據(jù)類型命名:用自定義名字為已有數(shù)據(jù)類型命名n 類型定義簡單形式:類型定義簡單形式: typedef type name; typedef定義類型步驟定義類型步驟 按定義變量方法先寫出定義體按定義變量方法先寫出定義體 如如 int i; 將變量名換成新類型名將變量名換成新類型名 如如 int INTEGER; 最前面加最前面加typedef 如如 typedef int INTEGER; 用新類型名定義變量用新類型名定義變量 如如 INTEGER i
58、,j; 類型定義可嵌套類型定義可嵌套 第第11章章 文件文件u 文件概述文件概述u 文件類型指針文件類型指針u 文件的打開與關(guān)閉文件的打開與關(guān)閉u I/O及其重定向及其重定向u 文件的讀寫文件的讀寫Main三 FILE *fp;Source file .c輸入數(shù)據(jù)原始數(shù)據(jù)磁盤磁盤/帶文件帶文件處理結(jié)果輸出數(shù)據(jù)文件概述文件概述 一、文件一、文件 存儲在外部介質(zhì)上數(shù)據(jù)的集合存儲在外部介質(zhì)上數(shù)據(jù)的集合使用數(shù)據(jù)文件的目的:3、長期保存數(shù)據(jù)2、數(shù)據(jù)共享1、程序與數(shù)據(jù)分離普通文件:普通文件:設(shè)備文件:設(shè)備文件:存儲介質(zhì)文件(磁盤、磁帶等)存儲介質(zhì)文件(磁盤、磁帶等)非存儲介質(zhì)(鍵盤、顯示器、打印機(jī)等)非存
59、儲介質(zhì)(鍵盤、顯示器、打印機(jī)等)2、按存儲介質(zhì)、按存儲介質(zhì)3 3、按數(shù)據(jù)的組織形式、按數(shù)據(jù)的組織形式文本文件:文本文件: ASCIIASCII文件,每個(gè)字節(jié)存放一個(gè)字符的文件,每個(gè)字節(jié)存放一個(gè)字符的ASCIIASCII碼碼二進(jìn)制文件:二進(jìn)制文件: 數(shù)據(jù)按其在內(nèi)存中的存儲形式原樣存放數(shù)據(jù)按其在內(nèi)存中的存儲形式原樣存放二、文件分類二、文件分類 1、按文件的邏輯結(jié)構(gòu)、按文件的邏輯結(jié)構(gòu)記錄文件:記錄文件:由具有一定結(jié)構(gòu)的記錄組成由具有一定結(jié)構(gòu)的記錄組成(定長和不定長)(定長和不定長)流式文件:流式文件:由一個(gè)個(gè)字符(字節(jié))數(shù)據(jù)順序組成由一個(gè)個(gè)字符(字節(jié))數(shù)據(jù)順序組成三、文件處理三、文件處理 關(guān)閉關(guān)閉
60、(讀(讀/寫)處理寫)處理 打開打開 文件變量:指向文件結(jié)構(gòu)體的指針typedef struct int _fd; /文件號文件號 int _cleft; /緩沖區(qū)中剩下的字符數(shù)緩沖區(qū)中剩下的字符數(shù) int _mode; /文件操作方式文件操作方式 char *_next; /文件當(dāng)前讀寫位置文件當(dāng)前讀寫位置 char *_buff; /文件緩沖區(qū)位置文件緩沖區(qū)位置 FILE ;FILE *變量名;變量名;打開文件(打開文件(fopenfopen)FILE FILE * *fopen(char fopen(char * *name,char name,char * *mode)mode)FIL
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026北京保障房中心有限公司法律管理崗招聘1人備考題庫及參考答案詳解1套
- 2026四川長虹電源股份有限公司招聘總賬主管會計(jì)崗位1人備考題庫含答案詳解
- 2026內(nèi)蒙古鄂爾多斯市合創(chuàng)控股集團(tuán)有限公司招聘6人備考題庫帶答案詳解
- 2026廣東第二師范學(xué)院基礎(chǔ)教育集團(tuán)招聘4人備考題庫參考答案詳解
- 2026北京市北方工業(yè)大學(xué)招聘高鋼中心實(shí)驗(yàn)室科研助理1人備考題庫及答案詳解一套
- 2026山西朔州市平魯區(qū)就業(yè)見習(xí)人員招募121人備考題庫(含答案詳解)
- 2026福建福州三十六中招聘初一英語頂崗教師和地理老師3人考試參考試題及答案解析
- 2026天津大學(xué)出版社有限責(zé)任公司招聘4人備考題庫及答案詳解參考
- 未來創(chuàng)業(yè)目標(biāo)承諾書范文8篇
- 智能設(shè)備質(zhì)量穩(wěn)定承諾書5篇
- (完整版)房屋拆除施工方案
- 供水管道搶修知識培訓(xùn)課件
- 廣東物業(yè)管理辦法
- 業(yè)務(wù)規(guī)劃方案(3篇)
- 大客戶開發(fā)與管理課件
- 上海物業(yè)消防改造方案
- 供應(yīng)商信息安全管理制度
- 2025年農(nóng)業(yè)機(jī)械化智能化技術(shù)在農(nóng)業(yè)防災(zāi)減災(zāi)中的應(yīng)用報(bào)告
- 發(fā)展與安全統(tǒng)籌策略研究
- 移動(dòng)式壓力容器安全技術(shù)監(jiān)察規(guī)程(TSG R0005-2011)
- 綠化工程監(jiān)理例會會議紀(jì)要范文
評論
0/150
提交評論