版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
共
67
頁第1
頁第七章大連理工大學(xué)函數(shù)共
67
頁第2
頁
本章要點函數(shù)的定義函數(shù)的調(diào)用函數(shù)間的數(shù)據(jù)傳遞變量的存儲類型變量的作用范圍內(nèi)部函數(shù)和外部函數(shù)共
67
頁第3
頁C程序是函數(shù)的集合體,每個函數(shù)是一個獨立的程序模塊。有一個主函數(shù),若干個子函數(shù),程序總是從主函數(shù)開始執(zhí)行;函數(shù)可集中或分散存放在一個或多個源程序文件中。所有子函數(shù)地位平等,可互相調(diào)用、自我調(diào)用?!ひ牒瘮?shù)的優(yōu)點:減少重復(fù)編寫程序的工作量;使程序便于調(diào)試和閱讀。函數(shù)F1()main()F11()F2()F21()F22()C語言程序的結(jié)構(gòu)7.1函數(shù)的概念和函數(shù)的定義共
67
頁第4
頁數(shù)學(xué)函數(shù)
math.h字符和字符串函數(shù)
ctype.h,string.h輸入/輸出函數(shù)
stdio.h動態(tài)存儲分配函數(shù)
calloc(),malloc()形式無參函數(shù)有參函數(shù)空函數(shù)庫函數(shù)用戶定義函數(shù):C函數(shù)的分類共
67
頁第5
頁[7-1]輸入三個整數(shù),計算它們的和并輸出運算結(jié)果。main(){inta,b,c,sum;scanf("%d,%d,%d",&a,&b,&c);sum=add(a,b,c);printf("sum=%d\n",sum);}intadd(intx,inty,intz){ints;s=x+y+z;returns;}函數(shù)示例定義的求和函數(shù)共
67
頁第6
頁7.1.2函數(shù)的定義定義函數(shù)應(yīng)包括的內(nèi)容:(1)指定函數(shù)的名字,以便以后按名調(diào)用;(2)指定函數(shù)的類型,即函數(shù)值的類型;(3)指定函數(shù)的參數(shù)的名字和類型(有參);(4)指定函數(shù)執(zhí)行的操作,即函數(shù)完成的功能。在程序中用到的所有函數(shù),必須先定義,后使用。共
67
頁第7
頁定義函數(shù)的一般形式類型標(biāo)識符函數(shù)名(形式參數(shù)表){[說明部分]
語句}若無參數(shù),寫void或空。是被初始化的內(nèi)部變量,壽命和可見性僅限于函數(shù)內(nèi)部若不說明類型,一律自動按整型處理函數(shù)體(一段程序,實現(xiàn)函數(shù)的功能)共
67
頁第8
頁1.無參函數(shù)的定義形式
類型標(biāo)識符函數(shù)名()
{
[說明部分]
語句
}[例7-1]print_message(){printf("Howareyou!\n");}共
67
頁第9
頁[例7-2]intmax(intx,inty){intz;z=x>y?x:y;returnz;}類型標(biāo)識符函數(shù)名(形式參數(shù)表列)
{[說明部分]
語句
}
intmax(x,y)
intx,y;
{intz;z=x>y?x:y;returnz;}形參變量的說明(傳統(tǒng)形式)形參變量的說明(現(xiàn)代形式)2.有參函數(shù)的定義形式共
67
頁第10
頁7.1.3函數(shù)的調(diào)用1.函數(shù)調(diào)用的一般形式為:
函數(shù)名(實際參數(shù)列表);或函數(shù)名(實際參數(shù)列表)說明:實參必須有確定的值,可以是常量、變量、表達式及函數(shù)調(diào)用。實參與形參的類型、個數(shù)、順序必須一致。多個實參用逗號分隔。
2.
執(zhí)行過程:計算各個表達式;把得到值賦給對應(yīng)的形參;執(zhí)行函數(shù)體;遇到return語句或執(zhí)行完最后一條語句,返回到函數(shù)調(diào)用處。共
67
頁第11
頁(1)函數(shù)語句:
(把函數(shù)調(diào)用作為一個語句)
一般形式:函數(shù)名(實際參數(shù)表);
使用情況:這種方式常用于調(diào)用一個可以忽略返回值或沒有返回值的函數(shù),只要求函數(shù)完成一定的操作。例如:print_message();3.函數(shù)調(diào)用的具體方式(2)函數(shù)表達式:(函數(shù)調(diào)用出現(xiàn)在一個表達式中)一般形式:變量名=函數(shù)表達式
使用情況:這種表達式稱為函數(shù)表達式。要求函數(shù)帶回一個確定的值參加表達式的運算。例如:c=3+max(a,b);d=pow(c,i);共
67
頁第12
頁7.1.4函數(shù)的返回值2.
函數(shù)的返回值語句一般形式:
return表達式;
或return(表達式);
功能:退出函數(shù),將表達式的值帶回主調(diào)函數(shù),回到程序原來的位置繼續(xù)執(zhí)行。
定義:通過函數(shù)調(diào)用使主調(diào)函數(shù)得到一個確定的值,稱為函數(shù)的返回值。共
67
頁第13
頁說明:return語句只能把一個返回值傳遞給調(diào)用函數(shù)。返回值的類型為定義的函數(shù)類型,若return語句中表達式類型與函數(shù)類型不一致,以函數(shù)類型為準(zhǔn)。返回值可以是有確定值的常量、變量或表達式,也可以是地址。當(dāng)返值是地址時,應(yīng)該用指針接受。無返回值的函數(shù),定義為void類型(無類型函數(shù))。一個函數(shù)中可以有多個返回語句。共
67
頁第14
頁[例7-3]用函數(shù)facto計算m階乘。main(){intm;longmm;longfacto(int);
scanf("%d",&m);mm=facto(m);
printf("%d!=%ld.\n",m,mm);}longfacto(intx){longy;for(y=1;x>0;--x)y*=x;return(y);}函數(shù)執(zhí)行過程
main(){mm=facto(m);}facto(x){
return
(y);}調(diào)用返回函數(shù)調(diào)用共
67
頁第15
頁
main(){inta,b,c;scanf(“%d,%d”,&a,&b);c=max(a,b);printf(“Maxis%d”,c);}[例7-4]intmax(intx,inty){intz;z=x>y?x:y;return(z);
}形參:通知系統(tǒng)要預(yù)留內(nèi)存位置.實參:在運行時把值傳給函數(shù).把函數(shù)的
結(jié)果賦給函數(shù)名形參與實參、函數(shù)名與返回值之間的關(guān)系共
67
頁第16
頁/*1*//*2*//*3*//*4*//*5*//*11*//*12*//*13*//*14*//*15*//*16*/main(){inta,b,c;scanf("%d,%d",&a,&b);c=max(a,b);printf(”max=%d\n",c);}intmax(x,y)intx,y;{intz;if(x>y)z=x;elsez=y;return(z);}斷點保護斷點和現(xiàn)場,轉(zhuǎn)向11入口虛實結(jié)合a-x,b-y返回斷點恢復(fù)現(xiàn)場帶回函數(shù)值數(shù)據(jù)在函數(shù)間的傳遞共
67
頁第17
頁intmax(x,y)intx,y;{intz;if(x>y)z=x;elsez=y;return(z);}返回整型函數(shù)值intmax(x,y)intx,y;{intz;if(x>y)z=x;elsez=y;
return;}返回不確定的函數(shù)值
max(x,y)intx,y;{intz;if(x>y)z=x;elsez=y;}無返回語句在此返回缺省類型說明
數(shù)據(jù)返回值共
67
頁第18
頁[例7-5]用函數(shù)計算浮點數(shù)x的n次方,其中n為int型(n>=0)doublepower(doublex,intn){doublep=1;inti;if(n>0)for(i=1;i<=n;i++)p=p*x;returnp;}main(){printf(“%lf”,power(3,5));}共
67
頁第19
頁
值傳遞:
在函數(shù)調(diào)用時,實參將其值傳遞給形參。
實參對形參的數(shù)據(jù)傳遞是“值傳遞”,即單向傳遞,只由實參傳遞給形參,而不能由形參傳回來給實參。實參與形參占用不同的單元。7.1.5函數(shù)參數(shù)的傳遞方式
地址傳遞:將實參的地址傳遞給形參,實參和形參指向同一內(nèi)存空間,對形參的修改,可以直接影響實參。共
67
頁第20
頁[例7-6]編寫函數(shù)交換兩個變量的值。
#include“stdio.h”swap(int
x,int
y)
{int
temp;
temp=x;x=y;
y=temp;
printf("x=%d,y=%d\n",x,y);}main(){inta,b;a=5;b=10;printf("a=%d,b=%d\n",a,b);
swap(a,b);
printf("a=%d,b=%d\n",a,b);}運行結(jié)果:a=5,b=10x=10,y=5a=5,b=10共
67
頁第21
頁7.1.6函數(shù)的聲明問題的提出:C語言程序可由若干文件組成,每一個文件可以單獨編譯。若函數(shù)使用在定義之前,必須在調(diào)用函數(shù)前為編譯程序提供所用函數(shù)的返回值類型和參數(shù)的類型、個數(shù),以保證函數(shù)調(diào)用成功,就需要對函數(shù)聲明。
同變量一樣,函數(shù)的調(diào)用也應(yīng)該遵循“先說明,后使用”的原則。
函數(shù)聲明的一般形式:
類型標(biāo)識符函數(shù)名(類型1形參1,類型2形參2,……);功能:通知編譯程序函數(shù)值類型、參數(shù)個數(shù)及類型,為編譯程序進行類型檢查提供依據(jù)。共
67
頁第22
頁main(){
floatadd(floatx,floaty);
floata,b,c;scanf(“%f,%f”,&a,&b);c=add(a,b);printf(“sumis%f”,c);}/*定義add函數(shù)*/floatadd(floatx,floaty){floatz;z=x+y;return(z);}對被調(diào)用函數(shù)的說明作為表達式被調(diào)用共
67
頁第23
頁3.函數(shù)聲明和函數(shù)定義的區(qū)別
函數(shù)聲明的作用是把函數(shù)的名字、函數(shù)類型以及形參的類型、個數(shù)和順序通知編譯系統(tǒng),以便在調(diào)用該函數(shù)時系統(tǒng)按此進行對照檢查。
函數(shù)定義是指對函數(shù)功能的確立,包括指定函數(shù)名、函數(shù)值類型、形參及其類型、函數(shù)體等,它是一個完整的、獨立的函數(shù)單位。
函數(shù)聲明與函數(shù)定義的首部唯一區(qū)別:函數(shù)說明語句的()之后必須有分號,而函數(shù)定義頭部的()之后沒有分號。共
67
頁第24
頁4.可省略被調(diào)用函數(shù)聲明的三種情況⑴函數(shù)的返回值為整型或字符型時(按整型處理)main(){inta,b,c;scanf(“%d,%d”,&a,&b);c=max(a,b);printf(“maxis%d”,c);}max(intx,inty){intz;z=x>y?x:y;return(z);}建議都加以聲明共
67
頁第25
頁⑵被調(diào)用函數(shù)在主調(diào)函數(shù)之前定義floatadd(floatx,floaty){floatz;z=x+y;return(z);}main(){floata,b;scanf(“%f,%f”,&a,&b);printf(“sumis%f”,add(a,b));}共
67
頁第26
頁⑶在所有函數(shù)定義之前說明charletter(char,char);floatf(float,float);inti(float,float);main(){…….}charletter(charc1,charc2){……}floatf(floatx,floaty){……}inti(float,float){……}在所有函數(shù)之前說明函數(shù)類型定義函數(shù)letter、f和i共
67
頁第27
頁7.2數(shù)組作函數(shù)參數(shù)數(shù)組元素可以作函數(shù)的實參數(shù)組元素作為表達式的組成部分做函數(shù)的實參可以單向傳遞給形參。例如:
inta[10];······x=power(a[6],5);數(shù)組名可以作函數(shù)的實參和形參多維數(shù)組可以作函數(shù)參數(shù)共
67
頁第28
頁一維數(shù)組作函數(shù)參數(shù),形參的寫法為:
類型說明符形參數(shù)組名[數(shù)組長度]例如:floataverage(floatarray[10]) { … }main(){floatb[10];inti;for(i=0;i<10;i++)scanf(“%f”,&b[i]);…average(b);} 7.2.1一維數(shù)組作函數(shù)參數(shù)說明:形參和實參分別定義數(shù)組數(shù)組做函數(shù)參數(shù)時,實參應(yīng)用數(shù)組名,必須有確切值實參數(shù)組和形參數(shù)組類型應(yīng)一致。共
67
頁第29
頁說明:實參數(shù)組和形參數(shù)組大小不一定一致,形參數(shù)組可以不指定大小。(指一維數(shù)組)。數(shù)組名除作為變量的標(biāo)識外,還代表該數(shù)組在內(nèi)存中存放區(qū)域的首地址。數(shù)組名做函數(shù)實參與形參之間是“地址傳遞”,實參數(shù)組將數(shù)組的起始地址傳遞給形參數(shù)組。編譯系統(tǒng)不再為形參數(shù)組分配存儲單元。在函數(shù)體中對形參數(shù)組的元素操作時就是對實參數(shù)組的元素進行操作。形參數(shù)組各元素的值發(fā)生變化會使實參數(shù)組各元素的值發(fā)生同樣的變化。數(shù)組名作函數(shù)參數(shù)可實現(xiàn)大量數(shù)據(jù)的傳遞,無須返回數(shù)組值。共
67
頁第30
頁[例7-7]閱讀如下程序,給出打印結(jié)果
voidswap(inta[]){intt;t=a[0];a[0]=a[1];a[1]=t;}main(){intb[2]={1,2};swap(b);printf(“b[0]=%d,b[1]=%d\n”,b[0],b[1]);}結(jié)果:程序運行演示可不定義長度b數(shù)組a數(shù)組在調(diào)用函數(shù)過程中改變了原數(shù)組的值,實參數(shù)組與形參數(shù)組共享一組存儲空間,地址傳遞共
67
頁第31
頁[例7-8]編寫函數(shù)求n元數(shù)組的平均值。程序設(shè)計:
doubleaverage(inta[],intn){inti;doubles=0;for(i=0;i<n;i++)s=s+a[i];returns/n;}
主函數(shù)調(diào)用如何編寫?
用另外一個參數(shù)表示數(shù)組的長度共
67
頁第32
頁[例7-9]:用選擇法對數(shù)組中10個整數(shù)按由小到大排序.程序設(shè)計思想:函數(shù)sort(array[],n)
:實現(xiàn)數(shù)組元素由小到大排序。主程序:輸入array數(shù)組,調(diào)用sort函數(shù)比較,輸出排序后的array數(shù)組。voidsort(intarray[],intn){inti,j,k,t;for(i=0;i<n-1;i++){k=i;for(j=i+1;j<n;j++)if(array[j]<array[k])k=j;if(k!=i){t=array[k];array[k]=array[i];array[i]=t;}}}共
67
頁第33
頁main(){inta[10],i;printf(“enterarray:\n”);for(i=0;i<10;i++)scanf(“%d”,&a[i]);sort(a,10);printf(“thesortedarray:\n”);for(i=0;i<10;i++)printf(“%d”,a[i]);printf(“\n”);}由于地址傳遞,實參數(shù)組a改變數(shù)組名做參數(shù)的好處:⑴由于只需復(fù)制一個地址值,而無須復(fù)制全部需要處理的數(shù)據(jù),因此節(jié)約存儲空間并提高效率。⑵由于主調(diào)函數(shù)和被調(diào)函數(shù)是在相同的內(nèi)存區(qū)域上對數(shù)據(jù)進行操作,因此可以實現(xiàn)數(shù)據(jù)的同步更新。函數(shù)調(diào)用共
67
頁第34
頁7.2.2二維數(shù)組作函數(shù)參數(shù)二維數(shù)組作函數(shù)參數(shù),形參的寫法為:
類型說明符形參名[數(shù)組長度1][數(shù)組長度2]說明:形參數(shù)組定義時可以指定或省略第一維的大小例如:intarray[3][10];或intarray[][10];
intarray[3][];和intarray[][];錯誤
實參數(shù)組可以大于形參數(shù)組例如:實參數(shù)組定義為:intarray[5][10];
形參數(shù)組定義為:intarray[3][10];
這時形參數(shù)組只取實參數(shù)組的一部分,其余部分不起作用。共
67
頁第35
頁[例7-10]寫一函數(shù),求3*4矩陣中的最大值。
intmax_value(intarray[][4]){inti,j,max;max=array[0][0];for(i=0;i<3;i++)for(j=0;j<4;j++)if(array[i][j]>max)max=array[i][j];return(max);}main(){inta[3][4]={{1,3,5,7},{2,4,6,8},{10,12,15,17}};printf(“max=%d\n”,max_value(a));}函數(shù)調(diào)用共
67
頁第36
頁7.3函數(shù)的嵌套調(diào)用和遞歸調(diào)用7.3.1函數(shù)的嵌套調(diào)用嵌套定義:在定義一個函數(shù)時,該函數(shù)體內(nèi)包含另一個函數(shù)的定義。嵌套調(diào)用:在調(diào)用一個函數(shù)的過程中,又調(diào)用另一個函數(shù)。
C語言不能嵌套定義,但可以嵌套調(diào)用!共
67
頁第37
頁main函數(shù)調(diào)用A函數(shù)結(jié)束A函數(shù)調(diào)用B函數(shù)B函數(shù)192873456
兩層嵌套的例子共
67
頁第38
頁7.3.2函數(shù)的遞歸調(diào)用f函數(shù)調(diào)用f函數(shù)1.遞歸的概念:在調(diào)用一個函數(shù)的過程中直接或間接地調(diào)用該函數(shù)本身。直接調(diào)用:intf(x)intx;{inty,z;……z=f(y);……return(2*z);}共
67
頁第39
頁intf1(x)intx;{inty,z;…..z=f2(y);……return(2*z);}intf2(t)intt;{inta,c;…..c=f1(a);……return(3+c);}間接調(diào)用:f1函數(shù)調(diào)用f2函數(shù)f2函數(shù)調(diào)用f1函數(shù)共
67
頁第40
頁遞歸函數(shù)的執(zhí)行過程:
--遞歸調(diào)用:記住本次現(xiàn)場,遞歸調(diào)用。
--終了調(diào)用:返回上次調(diào)用現(xiàn)場。特點:
--是無終止的遞歸調(diào)用,因此,應(yīng)該給定一個限制遞歸次數(shù)的條件。
--結(jié)構(gòu)簡練。共
67
頁第41
頁floatfac(intn){floatf;if(n<0)printf(“n<0,dataerror!\n”);elseif((n==0)||(n==1))f=1;elsef=fac(n-1)*n;returnf;}main(){intn;floatf;scanf(“%d”,&n);f=fac(n);printf("\n%d!=%f",n,f);}f(n)=1(n=1,0)f(n-1)*n(n>1)[例7-11]用遞歸法求n!調(diào)用階乘函數(shù)共
67
頁第42
頁遞歸函數(shù)fac的求解過程,以求5的階乘為例:f=5*fac(4)f=4*fac(3)f=2*fac(1)f=1f=5*fac(4)f=4*fac(3)f=2*1f=3*fac(2)f=3*2*1············向下遞推向上回歸共
67
頁第43
頁[例7-12]用遞歸法將一個整數(shù)n轉(zhuǎn)換成字符串。例如輸入256,應(yīng)輸出“256”,n的位數(shù)不固定,可以是任意位數(shù)的整數(shù)。voidtranvers(intn){if(n/10!=0)
tranvers(n/10);printf("%c",n%10+'0');}main(){intn;printf(“pleaseinputanintegralnumber”);scanf("%d",&n);if(n<0){printf(“-");n=-1*n;}
tranvers(n);}
共
67
頁第44
頁main()函數(shù)第一次調(diào)用tranvers函數(shù)遞歸函數(shù)tranvers的求解過程示意圖第二次調(diào)用tranvers函數(shù)第三次調(diào)用tranvers函數(shù)tranvers(25)printf("%c",n%10+'0');printf("%c",n%10+'0');輸出字符2tranvers(2)printf("%c",n%10+'0');輸出字符5輸出字符6tranvers(256)結(jié)束共
67
頁第45
頁變量的數(shù)據(jù)類型char型
int型
float型
double型總結(jié):數(shù)據(jù)類型決定為變量分配的內(nèi)存單元的長度,數(shù)據(jù)的存放形式。(從程序設(shè)計角度,決定了可以表示的數(shù)的范圍)問題:1.何時為變量分配內(nèi)存單元?
2.變量位于內(nèi)存的什么位置?
3.變量的有效作用范圍?7.4變量的作用域和存儲方法(VC++環(huán)境)共
67
頁第46
頁
變量的作用域和生存期:
變量的作用域
指一個變量在程序中的有效范圍。(也稱為可見性)
C語言規(guī)定:凡是在函數(shù)內(nèi)定義的變量,它的作用域僅僅是本函數(shù)內(nèi);而在函數(shù)體外定義的變量,它的作用域是從定義點到文件尾。
變量的生存期
指程序在執(zhí)行期間,變量存在的時間間隔,即從給變量分配內(nèi)存,至所分配內(nèi)存被系統(tǒng)收回的那段時間。
共
67
頁第47
頁1.局部變量(內(nèi)部變量)定義:在函數(shù)內(nèi)部定義的變量,只能在本函數(shù)內(nèi)部使用。說明:主函數(shù)main定義的變量只在主函數(shù)中有效,主函數(shù)不能使用其它函數(shù)定義的變量。不同函數(shù)可以使用相同名字的變量。形式參數(shù)也是局部變量??梢栽谝粋€函數(shù)內(nèi)部,也可以在復(fù)合語句中定義變量;復(fù)合語句中定義的變量只在本復(fù)合語句中有效。7.4.1局部變量和全局變量charsearch(chars){charch;intk;…}變量s、ch、k的作用域編譯系統(tǒng)不為局部變量分配內(nèi)存單元,只是當(dāng)被調(diào)用時,根據(jù)需要分配臨時單元,調(diào)用結(jié)束,空間釋放。共
67
頁第48
頁例:main(){intm,n;……{intx,y;……}……}變量x,y的作用域變量m,n的作用域共
67
頁第49
頁2.全局變量定義:在函數(shù)之外定義的變量是全局變量(外部變量)。語法:類型說明變量名;使用范圍:可以為本文件中所有的函數(shù)公用。從定義變量的位置開始到本文件結(jié)束,這段程序中的函數(shù)可直接使用全局變量,inta,b=3;main(){…}floatk;charstr(chars[20]){…}全局變量a、b的作用域全局變量k的作用域共
67
頁第50
頁
intp=1,q=5;/*外部變量*/f1(inta)/*定義函數(shù)*/
{intb,c;……}
charc1,c2;/*外部變量*/f2(inta,intb)/*定義函數(shù)*/
{…….}main(){intm,n……}全局變量c1、c2的作用范圍全局變量p、q的作用范圍共
67
頁第51
頁例如:#include“stdio.h”inta=7,b=10;main(){inta=5,c;c=a+b;printf(“c=%d\n”,c);}
在同一源文件中,全局變量和局部變量可以同名,在局部變量的作用范圍內(nèi),全局變量不起作用。C=15全局變量局布變量局部變量全局變量共
67
頁第52
頁優(yōu)點:函數(shù)間數(shù)據(jù)聯(lián)系:同一文件中的一些函數(shù)引用全局變量,當(dāng)某個函數(shù)中改變了全局變量的值,其它函數(shù)中的全局變量值也隨之改變。函數(shù)可以得到多個返回值。缺點:全局變量在程序的全部執(zhí)行過程中都占用存儲單元。降低函數(shù)的通用性。使用過多,降低程序的清晰性。全局變量應(yīng)盡可能少用。
共
67
頁第53
頁
變量的存儲類別靜態(tài)存儲方式:程序運行期間分配固定存儲空間的方式。動態(tài)存儲方式:程序運行期間根據(jù)需要進行動態(tài)的分配存儲空間的方式。程序區(qū)靜態(tài)存儲區(qū)動態(tài)存儲區(qū)全局變量,局部靜態(tài)變量形式參數(shù)局部變量(自動)函數(shù)調(diào)用的現(xiàn)場保護和返回地址7.4.2變量的存儲方法共
67
頁第54
頁動態(tài)存儲變量特點
函數(shù)開始調(diào)用時為變量分配存儲空間,函數(shù)結(jié)束時釋放這些空間。靜態(tài)存儲變量特點
在靜態(tài)存儲區(qū)分配存儲單元,整個程序運行期間都不釋放。變量存貯類型有四種:自動變量(auto)靜態(tài)變量(static)外部變量(extern)寄存器變量(register)
auto、static、extern和register為存貯類型說明符。共
67
頁第55
頁(1)自動變量(auto)
函數(shù)中的局部變量,不做任何存儲類別的說明都為自動變量。定義形式:[auto]類型說明符變量名;
說明:·“auto”可以省略。
·以前所使用的全部變量都是自動變量。
·自動變量必須在一個函數(shù)體的內(nèi)部。
·
函數(shù)的形參也是自動變量。例如:intb,c=3等價于
autointb,c=3;
作用域:包含變量定義的復(fù)合語句或所說明的函數(shù)內(nèi)部;在函數(shù)被調(diào)用時才存在,從函數(shù)中返回時即消失,值也僅限于說明它的函數(shù),在其它的函數(shù)中不能存取,
在兩個不同的函數(shù)中可以分別使用同名的變量。1.局部變量的存儲方法共
67
頁第56
頁(2)局部靜態(tài)變量定義形式:在變量名前面加關(guān)鍵字static
static類型說明符變量名;局部靜態(tài)變量編譯時賦初值,每次調(diào)用時不賦初值,只保留調(diào)用結(jié)束時變量的值。如果不賦初值,編譯時自動賦0值。局部靜態(tài)變量只允許所在函數(shù)引用,其它函數(shù)不能引用。其值整個程序運行期間都不釋放。自動變量不賦初值,其值不確定。每調(diào)用一次,重新賦值一次。共
67
頁第57
頁例如:f(inta){intb=0;staticintc=3;b=b+1;c=c+1;return(a+b+c);}main(){inta=2,i;for(i=0;i<3;i++)printf(“%d,”,f(a));}運行結(jié)果為:
7,8,9第一次調(diào)用開始第一次調(diào)用結(jié)束第二次調(diào)用開始0b34410c局部靜態(tài)變量共
67
頁第58
頁(3)寄存器變量(register)
直接放置在運算器的寄存器中的變量稱為寄存器變量.
定義形式:
register類型說明符變量名;作用:對于使用頻繁的變量,定義為寄存器變量,不必從內(nèi)存而是直接從寄存器中取出參加運算,提高程序執(zhí)行效率。說明:只有局部自動變量和形式參數(shù)可作為寄存器變量,其它如局部靜態(tài)變量和全局變量不可以。屬于動態(tài)存儲方式,函數(shù)開始調(diào)用時為變量分配寄存器空間,函數(shù)結(jié)束時釋放寄存器空間。只有int、char和指針類型可定義為寄存器變量,而long、double和float型變量不能設(shè)定為寄存器型??捎糜谧兞靠臻g分配的寄存器個數(shù)依賴于具體的機器。通常為2到3個,若在一個函數(shù)中說明多于2到3個寄存器變量,編譯程序會自動地將它們變?yōu)樽詣幼兞?。?/p>
67
頁第59
頁2.全局變量的存儲類型(兩種:外部全局變量、靜態(tài)全局變量)(1)外部全局變量
在多個源程序文件的情況下,如果在一個文件中要引用在其它文件中定義的全局變量,則應(yīng)該在需要引用此變量的文件中,用extern做說明。例如:
prog1.c的內(nèi)容如下:inta;main(){x=6;f1();}voidf1(){a+=2;printf("a=%d\n",a);f2();}prog2.c的內(nèi)容為:externinta;voidf2(){a++;printf("a=%d\n",a);}共
67
頁第60
頁(2)靜態(tài)全局變量
在一個文件中定義的全局變量僅限于本文件引用,而不能被其它文件訪問,則可以定義為靜態(tài)全局變量。例如:staticintx;
說明:外部全局變量與靜態(tài)全局變量在同一文件內(nèi)的作用域一樣;外部全局變量可以被多
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 股票操盤委托合同協(xié)議書
- 2024-2030年中國網(wǎng)絡(luò)檢測設(shè)備行業(yè)市場深度分析及發(fā)展前景與投資機會研究報告
- 2024-2030年中國綠色建筑設(shè)計行業(yè)市場發(fā)展分析及投資前景預(yù)測研究報告
- 2024-2030年中國納米粉末行業(yè)運行動態(tài)及戰(zhàn)略規(guī)劃投資可行性研究報告
- 2024-2030年中國紅葡萄酒行業(yè)市場發(fā)展?fàn)顩r及發(fā)展趨勢與投資前景研究報告
- 2024-2030年中國紅花籽油市場銷售狀況與盈利前景預(yù)測報告
- 酒瓶清理合同模板
- 業(yè)務(wù)入股協(xié)議合同模板
- 建設(shè)工程框架合同模板
- 針織產(chǎn)品采購合同模板
- 常見禽病及禽病綜合防控措施課件
- 河南省中小學(xué)教師副高職稱評審申報指南(含六個附件證明模板)
- 急性胰腺炎護理查房(疑難病例討論)
- 二極管、三極管的識別與檢測
- 巴以沖突及其由來(精)課件
- 閉式回路液壓傳動技術(shù)Denison
- 智能控制第6章學(xué)習(xí)控制-迭代學(xué)習(xí)控制
- 金木水火土部編版課件
- 四年級上冊面積單位換算題100道
- 普通地質(zhì)學(xué)課件
- 區(qū)域科技創(chuàng)新能力評價
評論
0/150
提交評論