版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
變量的作用域
與變量的存儲(chǔ)類別
8.8局部變量和全局變量--8.8.1局部變量?jī)?nèi)部變量:在一個(gè)函數(shù)內(nèi)部定義的變量稱內(nèi)部變量。它只在本函數(shù)范圍內(nèi)有效,即:只有在本函數(shù)內(nèi)才能使用這些變量,故稱為“局部變量”。floatf1(inta)/*函數(shù)f1*/{
int
b,c;…/*a、b、c有效*/}charf2(intx,inty)/*函數(shù)f2*/{int
i,j;/*x、y、i、j有效*/}voidmain()/*主函數(shù)*/{int
m,n;…/*m、n有效*/}8.8局部變量和全局變量--8.8.1局部變量?jī)?nèi)部變量:⑴主函數(shù)中定義的變量只在主函數(shù)中有效,而不因?yàn)樵谥骱瘮?shù)中定義而在整個(gè)文件或程序中有效。主函數(shù)也不能使用其他函數(shù)中定義的變量。⑵不同函數(shù)中可以使用相同名字的變量,它們代表不同的對(duì)象,互不干擾。⑶形式參數(shù)也是局部變量。⑷在一個(gè)函數(shù)內(nèi)部,可以在復(fù)合語句中定義變量,這些變量只在本復(fù)合語句中有效,這種復(fù)合語句也稱為“分程序”或“程序塊”。8.8局部變量和全局變量--8.8.1局部變量?jī)?nèi)部變量:voidmain(){int
a,b;……{intc;c=a+b;c在此范圍內(nèi)有效a,b在此范圍內(nèi)也有效
……
}…}復(fù)合語句也稱為“分程序”或“程序塊”。8.8局部變量和全局變量--8.8.2全局變量外部變量:函數(shù)之外定義的變量稱為外部變量。外部變量可以為本文件中其他函數(shù)所共用。它的有效范圍為從定義變量的位置開始到本源文件結(jié)束。所以也稱全程變量。
8.8局部變量和全局變量--8.8.2全局變量外部變量:intp=1,q=5;/*外部變量*/floatf1(inta)/*定義函數(shù)f1*/{int
b,c;…}charc1,c2;/*外部變量*/charf2(intx,inty)/*定義函數(shù)f2*/{int
i,j;全局變量p,q的作用范圍
…全局變量c1,c2的作用范圍}voidmain()/*主函數(shù)*/{int
m,n;…}
8.8局部變量和全局變量--8.8.2全局變量例8.15有一個(gè)一維數(shù)組,內(nèi)放10個(gè)學(xué)生成績(jī),寫一個(gè)函數(shù),求出平均分、最高分和最低分。#include<stdio.h>floatMax=0,Min=0;
/*全局變量*/voidmain()
{floataverage(floatarray[],intn);floatave,score[10];
inti;
for(i=0;i<10;i++)
scanf(“%f”,&score[i]);
ave=average(score,10);
printf(“max=%6.2f\nmin=%6.2f\naverage=%6.2f\n“,Max,Min,ave);
}8.8局部變量和全局變量--8.8.2全局變量floataverage(floatarray[],intn)/*定義函數(shù),形參為數(shù)組*/
{inti;
floataver,sum=array[0];
Max=Min=array[0];
for(i=1;i<n;i++)
{if(array[i]>Max)Max=array[i];
elseif(array[i]<Min)Min=array[i];
sum=sum+array[i];
}
aver=sum/n;
return(aver);
}8.8局部變量和全局變量--8.8.2全局變量8.8局部變量和全局變量--8.8.2全局變量建議:一般不使用全局變量,因?yàn)椋?/p>
⑴
全局變量在程序的全部執(zhí)行過程中都占用存儲(chǔ)單元,而不是僅在需要時(shí)才開辟單元。⑵
使用全局變量過多,會(huì)降低程序的清晰性。在各個(gè)函數(shù)執(zhí)行時(shí)都可能改變外部變量的值,程序容易出錯(cuò)。因此,要限制使用全局變量。⑶降低函數(shù)的通用性。因?yàn)楹瘮?shù)在執(zhí)行時(shí)要依賴于其所在的外部變量。如果將一個(gè)函數(shù)移到另一個(gè)文件中,還要將有關(guān)的外部變量及其值一起移過去。但若該外部變量與其他文件的變量同名時(shí),就會(huì)出現(xiàn)問題,降低了程序的可靠性和通用性。一般要求把C程序中的函數(shù)做成一個(gè)封閉體,除了可以通過“實(shí)參——形參”的渠道與外界發(fā)生聯(lián)系外,沒有其他渠道。8.8局部變量和全局變量--8.8.2全局變量例8.16外部變量與局部變量同名。
#include<stdio.h>inta=3,b=5;/*a,b為外部變量*/a,b作用范圍voidmain(){inta=8;/*a為局部變量*/局部變量a作用范圍
printf(“%d”,max(a,b));全局變量b的作用范圍}max(inta,intb)/*a,b為局部變量*/{intc;c=a>b?a∶b;形參a、b作用范圍
return(c);}8.9變量的存儲(chǔ)類別--8.9.1動(dòng)態(tài)存儲(chǔ)方式與靜態(tài)存儲(chǔ)方式從變量的作用域(即從空間)角度來分,可分為:全局變量局部變量從變量值存在的時(shí)間角度來分,可分為:靜態(tài)存儲(chǔ)方式:指在程序運(yùn)行期間由系統(tǒng)分配固定的存儲(chǔ)空間的方式。動(dòng)態(tài)存儲(chǔ)方式:則是在程序運(yùn)行期間根據(jù)需要進(jìn)行動(dòng)態(tài)的分配存儲(chǔ)空間的方式。該存儲(chǔ)空間可分為:⑴
程序區(qū)⑵靜態(tài)存儲(chǔ)區(qū)⑶
動(dòng)態(tài)存儲(chǔ)區(qū)8.9變量的存儲(chǔ)類別--8.9.1動(dòng)態(tài)存儲(chǔ)方式與靜態(tài)存儲(chǔ)方式變量和函數(shù)有兩個(gè)屬性:數(shù)據(jù)類型數(shù)據(jù)的存儲(chǔ)類別:數(shù)據(jù)在內(nèi)存中存儲(chǔ)的方式。存儲(chǔ)方式分為兩大類:靜態(tài)存儲(chǔ)類動(dòng)態(tài)存儲(chǔ)類⑴
自動(dòng)的(auto)⑵靜態(tài)的(static)⑶寄存器的(register)⑷外部的(extern)根據(jù)變量的存儲(chǔ)類別,可以知道變量的作用域和生存期。8.9變量的存儲(chǔ)類別--8.9.2auto變量自動(dòng)變量auto:專門聲明為static存儲(chǔ)類別的局部變量都是動(dòng)態(tài)分配存儲(chǔ)空間,在調(diào)用該函數(shù)時(shí)系統(tǒng)會(huì)給它們分配存儲(chǔ)空間,在函數(shù)調(diào)用結(jié)束時(shí)就自動(dòng)釋放這些存儲(chǔ)空間。因此這類局部變量稱為自動(dòng)變量。自動(dòng)變量用關(guān)鍵字auto作存儲(chǔ)類別的聲明。函數(shù)中的形參和在函數(shù)中定義的變量(包括在復(fù)合語句中定義的變量),都屬此類。例如:int
f(inta)/*定義f函數(shù),a為形參*/{autoint
b,c=3;/*定義b、c為自動(dòng)變量*/
…}8.9變量的存儲(chǔ)類別--8.9.3用static聲明局部變量靜態(tài)變量static:當(dāng)函數(shù)中的局部變量的值在函數(shù)調(diào)用結(jié)束后不消失而保留原值時(shí),該變量稱為靜態(tài)局部變量。用關(guān)鍵字static進(jìn)行聲明。8.9變量的存儲(chǔ)類別--8.9.3用static聲明局部變量例8.17考察靜態(tài)局部變量的值。#include<stdio.h>voidmain(){int
f(int);
inta=2,i;
for(i=0;i<3;i++)
printf(“%d”,f(a);
}
int
f(inta)
{autointb=0;
staticc=3;
b=b+1;
c=c+1;
return(a+b+c);
}8.9變量的存儲(chǔ)類別--8.9.3用static聲明局部變量對(duì)靜態(tài)局部變量的說明:⑴靜態(tài)局部變量屬靜態(tài)存儲(chǔ)類別,在靜態(tài)存儲(chǔ)區(qū)內(nèi)分配存儲(chǔ)單元。在程序整個(gè)運(yùn)行期間都不釋放。而自動(dòng)變量(即動(dòng)態(tài)局部變量)屬動(dòng)態(tài)存儲(chǔ)類別,占動(dòng)態(tài)存儲(chǔ)區(qū)空間而不占靜態(tài)存儲(chǔ)區(qū)空間,函數(shù)調(diào)用結(jié)束后即釋放。⑵對(duì)靜態(tài)局部變量是在編譯時(shí)賦初值的,即只賦初值一次,在程序運(yùn)行時(shí)它已有初值。以后每次調(diào)用函數(shù)時(shí)不再重新賦初值而只是保留上次函數(shù)調(diào)用結(jié)束時(shí)的值。⑶如在定義局部變量時(shí)不賦初值的話,則對(duì)靜態(tài)局部變量來說,編譯時(shí)自動(dòng)賦初值0(對(duì)數(shù)值型變量)或空字符(對(duì)字符變量)。而對(duì)自動(dòng)變量來說,如果不賦初值則它的值是一個(gè)不確定的值。⑷雖然靜態(tài)局部變量在函數(shù)調(diào)用結(jié)束后仍然存在,但其他函數(shù)不能引用它。8.9變量的存儲(chǔ)類別--8.9.3用static聲明局部變量例8.18輸出1到5的階乘值。#include<stdio.h>voidmain(){int
fac(intn);
inti;
for(i=1;i<=5;i++)
printf(“%d!=%d\n”,i,fac(i));
}
int
fac(intn){staticintf=1;
f=f*n;
return(f);
}8.9變量的存儲(chǔ)類別--8.9.4register變量
寄存器變量register:變量的值是存放在內(nèi)存中的。當(dāng)程序中用到哪一個(gè)變量的值時(shí),由控制器發(fā)出指令將內(nèi)存中該變量的值送到運(yùn)算器中。經(jīng)過運(yùn)算器進(jìn)行運(yùn)算,如果需要存數(shù),再從運(yùn)算器將數(shù)據(jù)送到內(nèi)存存放。8.9變量的存儲(chǔ)類別--8.9.4register變量
寄存器變量register的使用:如果有一些變量使用頻繁,則為存取變量的值要花費(fèi)不少時(shí)間。為提高執(zhí)行效率,C語言允許將局部變量的值放在CPU中的寄存器中,需要用時(shí)直接從寄存器取出參加運(yùn)算,不必再到內(nèi)存中去存取。由于對(duì)寄存器的存取速度遠(yuǎn)高于對(duì)內(nèi)存的存取速度,因此這樣做可以提高執(zhí)行效率。這種變量叫做寄存器變量,用關(guān)鍵字register作聲明。8.9變量的存儲(chǔ)類別--8.9.5用extern聲明外部變量外部變量:外部變量是在函數(shù)的外部定義的全局變量,它的作用域是從變量的定義處開始,到本程序文件的末尾。在此作用域內(nèi),全局變量可以為程序中各個(gè)函數(shù)所引用。編譯時(shí)將外部變量分配在靜態(tài)存儲(chǔ)區(qū)。用extern來聲明外部變量,以擴(kuò)展外部變量的作用城。用extern聲明外部變量:在一個(gè)文件內(nèi)聲明外部變量在多文件的程序中聲明外部變量8.9變量的存儲(chǔ)類別--8.9.5用extern聲明外部變量例8.20用extern聲明外部變量,擴(kuò)展它在程序文件中的作用域。#include<stdio.h>
voidmain(){int
max(int,int);/*外部變量聲明*/
externA,B;
printf("%d\n",max(A,B));}
intA=13,B=-8;/*定義外部變量*/
int
max(int
x,inty)/*定義max函數(shù)*/{intz;z=x>y?x:y;
return(z);}8.9變量的存儲(chǔ)類別--8.9.5用extern聲明外部變量例8.21用extern將外部變量的作用域擴(kuò)展到其他文件。本程序的作用是給定b的值,輸入a和m,求a×b和am的值。文件file1.c中的內(nèi)容為:#include<stdio.h>
intA;/*定義外部變量*/voidmain(){int
power(int);
/*函數(shù)聲明*/
intb=3,c,d,m;
printf(“enterthenumberaanditspowerm:\n”);
scanf(“%d,%d”,&A,&m);
c=A*b;
printf(“%d*%d\n”,A,b,c);
d=power(m);
printf(“%d**%d=%d\n”,A,m,d);
}8.9變量的存儲(chǔ)類別--8.9.5用extern聲明外部變量例8.21用extern將外部變量的作用域擴(kuò)展到其他文件。本程序的作用是給定b的值,輸入a和m,求a×b和am的值。文件file1.c中的內(nèi)容為:
#include<stdio.h>
intA;/*定義外部變量*/
voidmain()
{int
power(int);
/*函數(shù)聲明*/
intb=3,c,d,m;
printf(“enterthenumberaanditspowerm:\n”);
scanf(“%d,%d”,&A,&m);
c=A*b;
printf(“%d*%d\n”,A,b,c);
d=power(m);
printf(“%d**%d=%d\n”,A,m,d);
}
文件file2.c中的內(nèi)容為:
externA;/*聲明A為一個(gè)已定義的外部變量*/
int
powre(intn)
{int
i,y=1;
for(i=1;i<=n;i++)
y=y*A;
return(y);
}8.9變量的存儲(chǔ)類別--8.9.6用static聲明外部變量用static聲明外部變量:在程序設(shè)計(jì)中,某些外部變量只限于被本文件引用,而不能被其他文件引用。這時(shí)可以在定義外部變量時(shí)加一個(gè)staitic聲明。例如:file1.cfile2.c
staticintA;externintA;
voidmain()voidfun(intn){{……A=A*n;
溫馨提示
- 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. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年家居軟裝搭配服務(wù)合同
- 2024年變壓器安裝工程監(jiān)理合同
- 2024年多功能吊車租賃服務(wù)協(xié)議
- 2024年工程全面承包協(xié)議
- 2024保溫運(yùn)輸合同保溫材料要求
- 2023年昭通市彝良縣醫(yī)共體總醫(yī)院龍海分院招聘考試真題
- 2023年江西中醫(yī)藥大學(xué)附屬第二附屬醫(yī)院招聘考試真題
- 2023年深圳市蛇口學(xué)校急聘小學(xué)教師考試真題
- 2023年廣豐區(qū)總醫(yī)院婦幼保健院院區(qū)招聘考試真題
- 04版吊車采購合同:采購數(shù)量與質(zhì)量標(biāo)準(zhǔn)
- 人教版(2024新版)七年級(jí)上冊(cè)英語 Unit 1 You and Me 單元測(cè)試卷(含答案解析)
- 人教版(2024)七年級(jí)上冊(cè)生物全冊(cè)教學(xué)設(shè)計(jì)
- 2024-2030年真空鍍膜行業(yè)經(jīng)營效益分析及投資價(jià)值戰(zhàn)略規(guī)劃研究報(bào)告
- 11 對(duì)人有禮貌 教學(xué)設(shè)計(jì)-2024-2025學(xué)年道德與法治一年級(jí)上冊(cè)統(tǒng)編版
- 細(xì)菌課件2024-2025學(xué)年(2024)人教版七年級(jí)生物上冊(cè)
- XX銀行關(guān)于開展中國銀行業(yè)自律公約等行規(guī)行約落實(shí)情況的自查報(bào)告
- 電子版門窗合同范本
- 2024巴黎奧運(yùn)會(huì)秋季開學(xué)第一課主題班會(huì)
- 中等職業(yè)技術(shù)學(xué)校園藝技術(shù)專業(yè)建設(shè)規(guī)劃(2021-2025)
- 工業(yè)用地開發(fā)項(xiàng)目社會(huì)穩(wěn)定風(fēng)險(xiǎn)分析
- 《絲綢服飾文化》課件-第一講絲綢的起源與發(fā)展
評(píng)論
0/150
提交評(píng)論