版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第5章作用域與存儲(chǔ)類型5.1.1作用域作用域是變量在程序中可引用的區(qū)域。作用域共分成塊作用域、文件作用域、函數(shù)聲明(原型)作用域、函數(shù)作用域、類作用域五種。1.塊作用域{}復(fù)合語句是一個(gè)塊。復(fù)合語句中定義的變量,作用域僅在該復(fù)合語句中。5.1.1作用域【例5.1】輸入兩數(shù),按從大到小的順序保存,并輸出結(jié)果。#include<stdio.h>voidmain(){inta,b; //a、b具有函數(shù)作用域
cout<<"輸入兩整數(shù):"<<endl;cin>>a>>b;cout<<“a="<<a<<'\t'<<"b="<<b<<endl;if(b>=a){ intt;//t具有塊作用域
t=a;a=b;b=t;//交換a,b的值
}cout<<"a="<<a<<'\t'<<"b="<<b<<endl;//t已經(jīng)無效}for(intk=1;k<=2;k++)S=MAX(4,6);[存儲(chǔ)類別]數(shù)據(jù)類型變量名,……在定義全局變量時(shí)也加說明符static。所謂“文件包含”是指將另一個(gè)源文件的內(nèi)容合并到當(dāng)前程序中。將文件名用雙引號括起來的,用來包含用戶自己定義的放在當(dāng)前目錄或其他目錄下的頭文件或其他源文件。{intm,n;函數(shù)聲明不是定義函數(shù),在作函數(shù)聲明時(shí),其中的形參作用域只在聲明中,即作用域結(jié)束于右括號。但其他文件如果要使用這個(gè)文件中定義的全局變量,必須在使用前用“extern”作外部聲明,外部聲明通常放在文件的開頭。max=x;min=x;//設(shè)定最大數(shù)和最小數(shù)intm=find();但其他文件如果要使用這個(gè)文件中定義的全局變量,必須在使用前用“extern”作外部聲明,外部聲明通常放在文件的開頭。Voidmain()if(b>=a)作用域是變量在程序中可引用的區(qū)域。5.1.1作用域2.文件作用域文件作用域也稱全局作用域。定義在所有函數(shù)之外的變量,具有文件作用域,作用域?yàn)閺亩x處到整個(gè)源文件結(jié)束。文件中定義的全局變量和函數(shù)都具有文件作用域。3.函數(shù)聲明作用域函數(shù)聲明不是定義函數(shù),在作函數(shù)聲明時(shí),其中的形參作用域只在聲明中,即作用域結(jié)束于右括號。正是由于形參不能被程序的其他地方引用,所以通常只要聲明形參個(gè)數(shù)和類型,形參名可省略。
5.1.1作用域4.函數(shù)作用域函數(shù)中定義的變量,包括形參和函數(shù)體中定義的局部變量,作用域都在該函數(shù)內(nèi),也稱作函數(shù)域。5.類作用域在介紹類和對象時(shí),可知類作用域是指類定義范圍(包括類的聲明部分和相應(yīng)成員函數(shù)實(shí)現(xiàn)整個(gè)范圍)。在該范圍內(nèi),類的成員函數(shù)對數(shù)據(jù)成員有無限訪問權(quán)限。5.1.2局部變量與全局變量一、局部變量
下列變量是局部變量:1、在一個(gè)函數(shù)內(nèi)部定義的變量;2、函數(shù)的形式參數(shù);
3、在某個(gè)復(fù)合語句中定義的變量;
floatf1(inta){intb,c;……}Voidmain(){intm,n;……}b,c有效m,n有效a有效main(){inta,b,c;……{intd;d=a+b;……}}d有效5.1.2局部變量與全局變量一、局部變量
說明:1、局部變量只在自己范圍內(nèi)有效;2、如果局部變量的有效范圍有重疊,則有效范圍小的優(yōu)先;
main(){inta,b,c;
……{intc;c=a+b;……}}局部優(yōu)先C有效二、全局變量
5.1.2局部變量與全局變量在函數(shù)之外定義的變量(外部變量)是全局變量全局變量的有效范圍是:從定義變量的位置開始到源文件結(jié)束7.7局部變量與全局變量二、全局變量
例:編寫一個(gè)函數(shù)實(shí)現(xiàn)同時(shí)返回10個(gè)數(shù)的最大和最小值分析:用一個(gè)函數(shù)返回兩個(gè)數(shù)據(jù),除了用函數(shù)值外,可以借助于全局變量
可見,全局變量可以減少函數(shù)的參數(shù)5.1.2局部變量與全局變量#include<stdio.h>#include<math.h>#include<stdlib.h>intmin;//全局變量minintfind(){intmax,x;x=rand()%101+100;//產(chǎn)生一個(gè)[100,200]之間的隨機(jī)數(shù)xprintf(“%d”,x);max=x;min=x;//設(shè)定最大數(shù)和最小數(shù)
for(inti=1;i<10;i++) {x=rand()%101+100; //再產(chǎn)生一個(gè)[100,200]之間的隨機(jī)數(shù)x printf(“%d”,x); if(x>max)max=x;//若新產(chǎn)生的隨機(jī)數(shù)大于最大數(shù),則進(jìn)行替換
if(x<min)min=x;//若新產(chǎn)生的隨機(jī)數(shù)小于最小數(shù),則進(jìn)行替換
} returnmax;}voidmain(){intm=find();printf(“\n最大數(shù):%d,最小數(shù):%d\n“,max,min);}7.7局部變量與全局變量二、全局變量
說明:1、利用全局變量可以在函數(shù)間傳遞參數(shù)。2、應(yīng)盡量少用全局變量3、如果全局變量與局部變量同名,則局部變量優(yōu)先
5.1.3動(dòng)態(tài)變量與靜態(tài)變量全局變量和局部變量:變量的作用域靜態(tài)存儲(chǔ)變量和動(dòng)態(tài)存儲(chǔ)變量:變量的存儲(chǔ)類別,即生存期
內(nèi)存中供用戶使用的存儲(chǔ)空間包括:①程序區(qū)②靜態(tài)存儲(chǔ)區(qū):編譯時(shí)分配空間③動(dòng)態(tài)存儲(chǔ)區(qū):執(zhí)行時(shí)分配空間
變量或函數(shù)的屬性:
作業(yè):P90:四、3、4P108:一、27】用自動(dòng)變量與靜態(tài)局部變量求三個(gè)整數(shù)的和。2局部變量與全局變量第5章作用域與存儲(chǔ)類型if(b>=a)1】輸入兩數(shù),按從大到小的順序保存,并輸出結(jié)果。externinta,b;intmax(intx,inty)帶參數(shù)的宏定義{intc;m=m+x+y;x=rand()%101+100;//產(chǎn)生一個(gè)[100,200]之間的隨機(jī)數(shù)x文件中定義的全局變量和函數(shù)都具有文件作用域。voidmain()#include<stdio.通常auto可以省略5.2變量的存儲(chǔ)類別1、自動(dòng)類型:存儲(chǔ)在動(dòng)態(tài)存儲(chǔ)區(qū),用auto說明
如:intfunc1(inta){autointb,c=3;……}通常auto可以省略
形參a,變量b、c都是自動(dòng)變量調(diào)用該函數(shù)時(shí),系統(tǒng)給它們分配存儲(chǔ)空間,函數(shù)調(diào)用結(jié)束時(shí)自動(dòng)釋放存儲(chǔ)空間。
自動(dòng)類型、寄存器類型的變量屬于動(dòng)態(tài)變量;靜態(tài)類型、外部類型的變量屬于靜態(tài)變量。5.2變量的存儲(chǔ)類別1、自動(dòng)類型:【例5.5】使用自動(dòng)變量的示例。#include<stdio.h>voidmain(){intx=5,y=10;//自動(dòng)變量x,yfor(intk=1;k<=2;k++){autointm=0,n=0;//自動(dòng)變量m,nm=m+1;n=n+x+y;printf("m=%d\tn=%d\n“,m,n);} }5.2變量的存儲(chǔ)類別2、寄存器類型(register)
①計(jì)算機(jī)中的寄存器的個(gè)數(shù)是有限的
②寄存器變量對寄存器的占用是動(dòng)態(tài)的
③有的系統(tǒng)將寄存器變量轉(zhuǎn)化為自動(dòng)變量處理,而有的系統(tǒng)會(huì)自動(dòng)設(shè)置寄存器變量
5.2變量的存儲(chǔ)類別3、靜態(tài)類型(static)
①靜態(tài)局部變量屬于靜態(tài)存儲(chǔ)類別,在程序整個(gè)運(yùn)行期間都不釋放存儲(chǔ)空間。②靜態(tài)局部變量在編譯時(shí)賦初值(僅賦一次值)③如果定義靜態(tài)局部變量時(shí)沒有賦初值,編譯時(shí)會(huì)自動(dòng)賦初值④靜態(tài)局部變量只能在定義它的函數(shù)內(nèi)被引用(它存在但不能被其它函數(shù)使用)
打印1到5的階乘(1)靜態(tài)局部變量5.2變量的存儲(chǔ)類別【例5.6】自動(dòng)變量與靜態(tài)局部變量的區(qū)別。#include<stdio.h>voidf(){intx=0;//初始化多次,棧中分配、相當(dāng)于autointx=0;staticinty=3;//靜態(tài)局部變量,僅初始化一次,靜態(tài)區(qū)分配
x=x+1;y=y+1;printf(“%d\t%d\n”,x,y);}voidmain(){inti;for(i=0;i<3;i++)f();}5.2變量的存儲(chǔ)類別【例5.7】用自動(dòng)變量與靜態(tài)局部變量求三個(gè)整數(shù)的和。#include<stdio.h>voidf(intx,inty){intm=0;//自動(dòng)變量
staticintn=0;//靜態(tài)局部變量,此處也可staticintn;m=m+x+y;n=n+x+y;printf("m=%d\tn=%d\n“,m,n);}voidmain(){inti=5,j=10,k;for(k=1;k<=3;k++)f(i,j);}printf("m=%d\tn=%d\n“,m,n);4、外部類型(extern)③有的系統(tǒng)將寄存器變量轉(zhuǎn)化為自動(dòng)變量處理,而有的系統(tǒng)會(huì)自動(dòng)設(shè)置寄存器變量函數(shù)聲明不是定義函數(shù),在作函數(shù)聲明時(shí),其中的形參作用域只在聲明中,即作用域結(jié)束于右括號。S=MAX(4,6);2、如果局部變量的有效范圍有重疊,則有效范圍小的優(yōu)先;定義格式:extern類型變量名;intfind()函數(shù)中定義的變量,包括形參和函數(shù)體中定義的局部變量,作用域都在該函數(shù)內(nèi),也稱作函數(shù)域。文件包含命令的一般形式為:(3)宏被定義以后,一般不能再重新定義。文件中定義的全局變量和函數(shù)都具有文件作用域。voidmain()2局部變量與全局變量文件名一般是以.5.2變量的存儲(chǔ)類別(2)靜態(tài)全局變量在定義全局變量時(shí)也加說明符static。程序由一個(gè)源程序文件實(shí)現(xiàn),一個(gè)全局變量和一個(gè)靜態(tài)全局變量是沒區(qū)別的。在多文件組成的程序中,一個(gè)全局變量和一個(gè)靜態(tài)全局變量在使用上是不同的,其他文件通過外部變量聲明可以使用一個(gè)全局變量,但卻無法使用靜態(tài)全局變量,靜態(tài)全局變量只能被定義它的文件所獨(dú)享。特點(diǎn):1)與全局變量基本相同,只是其作用范圍(即作用域)是定義它的程序文件,而不是整個(gè)程序。(2)靜態(tài)全局變量屬于靜態(tài)存儲(chǔ)類別的變量,所以它在程序一開始運(yùn)行時(shí),就被分配固定的存儲(chǔ)單元,所以其生存期是整個(gè)程序運(yùn)行期間。(3)使用靜態(tài)全局變量的好處是同一程序的兩個(gè)不同的源程序文件中可以使用相同名稱的變量名,而互不干擾。2、應(yīng)盡量少用全局變量所謂“文件包含”是指將另一個(gè)源文件的內(nèi)容合并到當(dāng)前程序中。intt;//t具有塊作用域3、靜態(tài)類型(static)在定義全局變量時(shí)也加說明符static。在文件中定義靜態(tài)全局變量n,在含有main函數(shù)的文件中又定義全局變量n,分析兩者是否有聯(lián)系?{autointm=0,n=0;//自動(dòng)變量m,n#include<stdio.S=4>6?4:6;#include<stdio.1、自動(dòng)類型:存儲(chǔ)在動(dòng)態(tài)存儲(chǔ)區(qū),用auto說明復(fù)合語句中定義的變量,作用域僅在該復(fù)合語句中。如果在程序中出現(xiàn)如下語句:定義格式:extern類型變量名;autointb,c=3;5.2變量的存儲(chǔ)類別(2)靜態(tài)全局變量【例5.8】編寫一個(gè)含兩個(gè)源程序文件程序(多文件程序見節(jié))。在文件中定義靜態(tài)全局變量n,在含有main函數(shù)的文件中又定義全局變量n,分析兩者是否有聯(lián)系?#include<stdio.h>intn;voidfn();voidmain(){ n=20; printf(“%d\n”,n); fn();}#include<stdio.h>//不能省略staticintn;//定義靜態(tài)全局變量nvoidfn(){n=n+1;printf(“%d\n”,n);}5.2變量的存儲(chǔ)類別4、外部類型(extern)定義格式:
extern
類型變量名;在由多個(gè)源程序文件組成的程序中,如果一個(gè)文件要使用另一個(gè)文件中定義的全局變量,這些源程序文件之間通過外部類型的變量進(jìn)行溝通。在一個(gè)文件中定義的全局變量缺省為外部的,即其作用域可以延伸到程序的其他文件中。但其他文件如果要使用這個(gè)文件中定義的全局變量,必須在使用前用“extern”作外部聲明,外部聲明通常放在文件的開頭。5.2變量的存儲(chǔ)類別4、外部類型(extern)【例5.9】將另一文件中的全局變量a,b定義為本文件外部變量的示例。第一個(gè)文件內(nèi)容如下:/*文件名:exemple5_9_1.c*/inta=20,b=7;//全局變量a,bintmax(intx,inty){returnx>y?x:y;}第二個(gè)文件內(nèi)容如下:/*文件名:exemple5_9_2.c*/#include<stdio.h>externinta,b;//外部變量a,bexternintmax(intx,inty);voidmain(){intc;c=max(a,b);printf("max=%d\n“,c);}存儲(chǔ)類別小結(jié)1、變量的定義方法
[存儲(chǔ)類別]數(shù)據(jù)類型變量名,……2、變量的劃分
編譯預(yù)處理C語言提供的預(yù)處理功能主要有以下3種:(1)宏定義命令(2)文件包含命令(3)條件編譯命令為了與一般C語句相區(qū)別,這些命令以符號“#”開頭,而且末尾不包含分號。預(yù)處理命令可放在程序開頭、中間和末尾,主要由需要而定。習(xí)慣上預(yù)編譯命令都是放在程序的開頭。宏定義宏定義命令是將一個(gè)標(biāo)識符定義為一個(gè)字符串,該標(biāo)識符被稱為宏名,被定義的字符串稱為替換文本。宏定義命令有兩種格式:簡單的宏定義帶參數(shù)的宏定義1.宏定義的一般形式為:#define宏名字符串如:注意:(1)#define、宏名和字符串之間一定要有空格。(2)宏名一般用大寫字母表示,以區(qū)別于普通標(biāo)識符
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年展覽館裝修工程承包協(xié)議2篇
- 2024年食堂服務(wù)團(tuán)隊(duì)派遣協(xié)議3篇
- 2025年度專利轉(zhuǎn)讓居間合同最高收費(fèi)標(biāo)準(zhǔn)與技術(shù)創(chuàng)新推廣2篇
- 2024開模具合同范本
- 2024年項(xiàng)目委托管理合同:管理內(nèi)容、管理期限與報(bào)酬
- 2025年度桉樹種植基地林業(yè)科研合作合同3篇
- 2024年度員工休假期間免責(zé)與福利待遇協(xié)議3篇
- 2023年紡織片梭織機(jī)項(xiàng)目融資計(jì)劃書
- 課題申報(bào)書:大數(shù)據(jù)賦能下高職學(xué)生畫像與高質(zhì)量充分就業(yè)實(shí)施路徑研究
- 課題申報(bào)書:從計(jì)算思維到計(jì)算參與:在線編程社區(qū)對青少年編程學(xué)習(xí)影響的跟蹤與實(shí)證
- 三年級新教科版科學(xué)《我們來做-“熱氣球”》說課稿
- 雙塊式無砟軌道道床板裂紋成因分析應(yīng)對措施
- FZ∕T 62044-2021 抗菌清潔巾
- 國家電網(wǎng)有限公司十八項(xiàng)電網(wǎng)重大反事故措施(修訂版)
- 凈水廠課程設(shè)計(jì)
- 全級老年大學(xué)星級學(xué)校達(dá)標(biāo)評價(jià)細(xì)則
- 模具維護(hù)保養(yǎng)PPT課件
- 《新媒體文案寫作》試卷4
- 【模板】OTS認(rèn)可表格
- 2021國家開放大學(xué)電大本科《流行病學(xué)》期末試題及答案
- 中國銀行_境外匯款申請表模板(練手)
評論
0/150
提交評論