第2章_數(shù)據(jù)存儲(chǔ)預(yù)處理_第1頁
已閱讀1頁,還剩27頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第2章 C語言快速入門,變量修飾符變量的作用域變量的生存期預(yù)處理指令,變量修飾符,const 修飾符(常量修飾符)例如:const int a=20;說明:必須賦初值!static 修飾符例如:static int x=0; 說明:靜態(tài)變量的生存期是整個(gè)程序執(zhí)行期,不會(huì)隨著函數(shù)的調(diào)用而動(dòng)態(tài)創(chuàng)建。,變量的作用域 ( Scope ),指在源程序中定義變量的位置及其能被讀寫訪問的范圍分為局部變量(Local Variabl

2、e) 全局變量(Global Variable ),局部變量的有效范圍是所在定義的函數(shù)內(nèi), 只有在本函數(shù)內(nèi)才能使用他們。在此函數(shù)以外是不能使用這些變量的。,局部變量( Local Variable ),全局變量( Global Variable ),在所有函數(shù)之外定義的變量生存期是整個(gè)程序,從程序運(yùn)行起即占據(jù)內(nèi)存,程序運(yùn)行過程中可隨時(shí)訪問,程序退出時(shí)釋放內(nèi)存有效范圍是:從定義變量的位置開始到本程序結(jié)束,如果在同一個(gè)源文件中,全局變

3、量與局部變量同名,則在局部變量的作用范圍內(nèi),外部變量被“屏蔽”,即不起作用。,auto 自動(dòng)變量——?jiǎng)討B(tài)存儲(chǔ)區(qū) register 寄存器變量 ——CPU中的寄存器 extern 外部變量 ——靜態(tài)存儲(chǔ)區(qū) static 靜態(tài)變量——靜態(tài)存儲(chǔ)區(qū),,存儲(chǔ)類型,程序區(qū),靜態(tài)存儲(chǔ)區(qū),動(dòng)態(tài)存儲(chǔ)區(qū),形參、

4、自動(dòng)變量、函數(shù)調(diào)用的現(xiàn)場(chǎng)等,全局變量、靜態(tài)變量,,,存放數(shù)據(jù),,RAM,在靜態(tài)區(qū)中存的變量是在源程序編譯時(shí)分配存儲(chǔ)單元的,在程序執(zhí)行完畢才釋放。 動(dòng)態(tài)區(qū)中的變量是在程序執(zhí)行過程中分配存儲(chǔ)單元的,并在程序執(zhí)行過程中釋放。,變量的生存期 靜態(tài)存儲(chǔ)區(qū)中的變量:與程序“共存亡” 動(dòng)態(tài)存儲(chǔ)區(qū)中的變量:與函數(shù)“共存亡” 寄存器中的變量: 同動(dòng)態(tài)存儲(chǔ)區(qū),程序區(qū),靜態(tài)存儲(chǔ)區(qū),動(dòng)態(tài)存儲(chǔ)區(qū),存放數(shù)據(jù),,RAM,9,自動(dòng)類型變量

5、,說明局部變量時(shí),用auto修飾或缺省情況下定義的變量稱為自動(dòng)類型變量: auto 類型 變量名;,void main(){ int i=10; auto int j; printf(“%d%d”,i,j);},i,j為自動(dòng)類型變量(局部變量),程序從變量的作用域開始,動(dòng)態(tài)地為i,j分配存儲(chǔ)空間;到變量的作用域結(jié)束,動(dòng)態(tài)地收回變量的存儲(chǔ)空間。(動(dòng)態(tài)存儲(chǔ)變量),自動(dòng)類型變量如果不賦初值,其值不確定:

6、 10 ?,,10,靜態(tài)類型變量,用關(guān)鍵詞static修飾的變量稱為靜態(tài)類型變量: static 類型 變量名;,static int y=5;static char s;void main(){ static float x; …},y,s為靜態(tài)類型全局變量,x為靜態(tài)類型局部變量,靜態(tài)類型變量為靜態(tài)存儲(chǔ)變量,在程序開始運(yùn)行時(shí)就為其分配存儲(chǔ)空間,直到程序運(yùn)行完畢收回,靜態(tài)類型變量

7、如果不賦初值,其初值為0: y=5,s=x=0,11,#include int t( ){ int i = 100; i+=5; return i;}void main(void){printf("i=%d\n",t());printf("i=%d\n",t());},靜態(tài)類型變量,例 使用靜態(tài)類型的局部變量,#include int

8、t( ){ static int i = 100; i+=5; return i;}void main(void){printf("i=%d\n",t());printf("i=%d\n",t());},i=105i=110,為了保存函數(shù)運(yùn)行的結(jié)果,以便在下次調(diào)用該函數(shù)時(shí),能繼續(xù)使用上次計(jì)算的結(jié)果,i=105i=105,靜態(tài)類型變量的初始

9、化僅在程序開始運(yùn)行時(shí)處理一次,執(zhí)行完函數(shù)后,系統(tǒng)不收回變量存儲(chǔ)空間。再次調(diào)用函數(shù)時(shí),變量仍使用相同的存儲(chǔ)空間,因此保留原來的值。,變量存儲(chǔ)類型,,局部變量默認(rèn)為auto型register型變量個(gè)數(shù)受限,且不能為long, double, float型局部static變量具有全局壽命和局部可見性局部static變量具有可繼承性extern不是變量定義,可擴(kuò)展外部變量作用域,例 文件file1.cint a;main( )

10、{ ……. ……. f2; ……. f1; …….}f1( ){ auto int b; ……… f2; ……..}f2( ){ static int c; ………},從不同角度對(duì)存儲(chǔ)類別的歸納,1、從作用域角度分,有局部變量和全局變量,它們采用的存儲(chǔ)類別是:,2、從變

11、量存在的時(shí)間來分,有動(dòng)態(tài)存儲(chǔ)和靜態(tài)存儲(chǔ)兩種類型。靜態(tài)存儲(chǔ)是程序整個(gè)運(yùn)行期間都存在,而動(dòng)態(tài)存儲(chǔ)則是在調(diào)用函數(shù)時(shí)臨時(shí)分配存儲(chǔ)單元。,動(dòng)態(tài)存儲(chǔ),,自動(dòng)變量 (本函數(shù)內(nèi)有效),寄存器變量(本函數(shù)內(nèi)有效),形式參數(shù),靜態(tài)存儲(chǔ),,靜態(tài)局部變量 (函數(shù)內(nèi)有效),外部變量 ( 其它文件可引用),靜態(tài)外部變量 (本文件內(nèi)有效),3、從變量值存放的位置來區(qū)分,可分為:,1. 內(nèi)存中靜態(tài)存儲(chǔ)區(qū),,靜態(tài)局部變量(函數(shù)內(nèi)有效),外部變量( 其它文件可引用),靜態(tài)

12、外部變量(本文件內(nèi)有效),2. 內(nèi)存中動(dòng)態(tài)存儲(chǔ)區(qū):,3. CPU中寄存器:,自動(dòng)變量 和 形式參數(shù),寄存器變量,對(duì)局部變量來說, static使變量由動(dòng)態(tài)存儲(chǔ)方式改為靜態(tài)存儲(chǔ)方式。對(duì)全局變量來說, static使變量局部化(局 部于本文件),但仍為靜態(tài)存儲(chǔ)方式。從作用域角度看,凡有static說明的,其作用域都是 局限的,或者是局限于本函數(shù)內(nèi)(靜態(tài)局部變量),或者局限于本文件內(nèi)(靜態(tài)外部變量),4、static對(duì)局部變量和全

13、局變量的作用不同。,預(yù)處理命令,作用:對(duì)源程序編譯之前做一些處理種類:宏定義 #define文件包含 #include條件編譯 #if--#else--#endif 等格式:“#”開頭占單獨(dú)書寫行語句尾不加分號(hào),宏定義不帶參數(shù)宏定義一般形式: #define 宏名 字符串功能:用指定標(biāo)識(shí)符(宏名)代替字符串,如 #define YES 1

14、 #define NO 0 #define PI 3.1415926 #define OUT printf(“Hello,World”);,20,帶參數(shù)宏定義一般形式:#define 宏名(參數(shù)表) 宏體,例 #define S (r) PI*r*r相當(dāng)于定義了不帶參宏S,代表字符串“(r) PI*r*r”,宏展開:形參用實(shí)參換,其它字符

15、保留宏體的各形參外一般應(yīng)加括號(hào)(),例 #define POWER(x) x*x x=4; y=6; z=POWER(x+y);宏展開:z=x+y*x+y;一般寫成: #define POWER(x) ((x)*(x))宏展開: z=((x+y)*(x+y));,例 #define S(a,b) a*b ………..  area=S(3,2);宏展開:

16、   area =3*2;,不能加空格,21,帶參數(shù)的宏定義,#define 宏名(參數(shù)表)使用參數(shù)的字符或字符串,# include # define VOLUMN(a,b,c) a*b*c# define V1(a,b) a*b# define V2(a,b) (a)*(b)# define V3 (a,b) (a)*(b)void main(void){ b = VOLUMN(1,2,3) ; c

17、 = V1(1+2,2+1); d = V2(1+2,2+1); e = V3(1+2,2+1);},在宏調(diào)用預(yù)編譯處理時(shí),依次用實(shí)參替代宏定義中的形參,并將替代后的字符串替代宏調(diào)用,在宏定義中要用括號(hào)把形參擴(kuò)起來,以減少錯(cuò)誤,b=6,c=6,d=9,,,,,宏定義時(shí),宏名與左括號(hào)之間不能有空格。如果有空格,則將空格后的全部字符都作為無參宏所定義的字符序列,而不作為形參,22,#define MAX(x,y) (

18、x)>(y)?(x):(y) …….main(){ int a,b,c,d,t; ……. t=MAX(a+b,c+d); ……}宏展開:t=(a+b)>(c+d)?(a+b):(c+d);,int max(int x,int y){ return(x>y?x:y);}main(){ int a,b,c,d,t; ……. t=ma

19、x(a+b,c+d); ………},例 用宏定義和函數(shù)實(shí)現(xiàn)同樣的功能,23,帶參的宏與函數(shù)區(qū)別,文件包含功能:一個(gè)源文件可將另一個(gè)源文件的內(nèi)容全部包含進(jìn)來一般形式: #include “文件名” 或 #include ,處理過程:預(yù)編譯時(shí),用被包含文件的內(nèi)容取代該預(yù)處理命令,再對(duì)“包含”后的文件作一個(gè)源文件編譯, 直接按標(biāo)準(zhǔn)目錄搜索“” 先在當(dāng)前目錄搜索,再搜

20、索標(biāo)準(zhǔn)目錄可指定路徑,被包含文件內(nèi)容源文件(*.c)頭文件(*.h),宏定義數(shù)據(jù)結(jié)構(gòu)定義函數(shù)說明等,文件包含可嵌套,也可以在file1中用兩個(gè)include命令分別包含file2和file3:#include "file3.h"#include "file2.h",file3應(yīng)出現(xiàn)在file2之前,26,如何運(yùn)行一個(gè)多文件的程序,用Turbo C 環(huán)境實(shí)現(xiàn)多文件程序的運(yùn)行先輸入并

21、編輯各個(gè)源文件分別存盤建立一個(gè)“項(xiàng)目文件” ,只包括組成程序的所有文件名。將此文件以“ *.prj”存盤在主菜單中選擇Project菜單,選擇菜單項(xiàng)Project name ,輸入剛建立的項(xiàng)目文件名按+運(yùn)行。,27,VC 環(huán)境中的多文件程序的運(yùn)行先輸入并編輯各個(gè)源文件分別存盤創(chuàng)建一個(gè)空的項(xiàng)目文件,用來存放該程序的上述各個(gè)文件。 File→New →Projects標(biāo)簽→ Win32 Console Application →

22、An empty project (即文件→ 新建→“ 工程”標(biāo)簽→ Win32 Console Application)空的項(xiàng)目文件創(chuàng)建好后,將事先編輯好的各源文件添加到項(xiàng)目文件中。Project→Add To Projects→Files (即工程→增加到工程→文件)編譯連接項(xiàng)目文件運(yùn)行項(xiàng)目文件,28,用#include 命令實(shí)現(xiàn)多文件程序的運(yùn)行格式:#include “源程序文件名”如果與當(dāng)前文件不在同文件夾中,還需

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲(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)論