C語言程序設(shè)計:第5章 函數(shù)_第1頁
C語言程序設(shè)計:第5章 函數(shù)_第2頁
C語言程序設(shè)計:第5章 函數(shù)_第3頁
C語言程序設(shè)計:第5章 函數(shù)_第4頁
C語言程序設(shè)計:第5章 函數(shù)_第5頁
已閱讀5頁,還剩61頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

C語言程序設(shè)計吉林大學(xué)珠海學(xué)院計算機(jī)系第5章函數(shù)函數(shù)的基本結(jié)構(gòu)函數(shù)的調(diào)用函數(shù)的參數(shù)傳遞變量的作用域及存儲類型4123本章內(nèi)容函數(shù)的基本概念所謂函數(shù),是可以反復(fù)使用的一個程序段,其他函數(shù)可通過調(diào)用語句來執(zhí)行這段程序,完成所需要的工作程序由基本語句和函數(shù)組成,每個函數(shù)完成相對獨(dú)立的功能,按一定規(guī)則調(diào)用這些函數(shù),就組成了解決某個特定問題的程序函數(shù)的基本概念從用戶的角度看,函數(shù)有兩種:1.標(biāo)準(zhǔn)庫函數(shù),由系統(tǒng)提供的。2.用戶自定義函數(shù),由程序設(shè)計者根據(jù)專門需要自己定義的從函數(shù)的定義形式看,函數(shù)分兩類:1.無參函數(shù),在調(diào)用函數(shù)時,主調(diào)函數(shù)不向被調(diào)用函數(shù)傳遞參數(shù)。2.有參函數(shù),在調(diào)用函數(shù)時,主調(diào)函數(shù)和被調(diào)用函數(shù)之間有參數(shù)函數(shù)定義函數(shù)定義的一般格式函數(shù)類型函數(shù)名(形式參數(shù)形式參數(shù)列表

){函數(shù)體}函數(shù)類型:函數(shù)執(zhí)行后返回結(jié)果的數(shù)據(jù)類型。若函數(shù)不返回任何結(jié)果值,那么函數(shù)類型指定為void。若函數(shù)類型省略,將默認(rèn)是int函數(shù)定義理解如下定義的函數(shù)longcube(intx){longa;a=x*x*x;return(a);}函數(shù)定義函數(shù)名稱:cube執(zhí)行后返回值類型是long型形式參數(shù):int型,名稱為x變量聲明:在函數(shù)體里,說明一個long型變量a,執(zhí)行語句:a=x*x*x;

返回語句:return(a);將a的值返回調(diào)用者函數(shù)類型long與return語句的返回值應(yīng)一致該函數(shù)不能獨(dú)立運(yùn)行,必須由調(diào)用者通過調(diào)用語句,把要計算的對象傳遞給它函數(shù)定義定義函數(shù)功能:若接收整型參數(shù)是偶數(shù),則打印Itiseven!,否則打印Itisodd!

void

odd_even(intx){if(x%2==0)

printf("Itiseven!\n");elseprintf("Itisodd!\n");}函數(shù)調(diào)用函數(shù)被定義后,只有在調(diào)用函數(shù)里安排函數(shù)調(diào)用,才能將控制從調(diào)用者轉(zhuǎn)移到被調(diào)函數(shù),也才能進(jìn)行數(shù)據(jù)的傳遞調(diào)用者在函數(shù)調(diào)用時,可向被調(diào)用者傳遞一個或多個參數(shù)。由調(diào)用者傳遞給被調(diào)函數(shù)的參數(shù),稱為實際參數(shù),簡稱實參。被調(diào)函數(shù)接收傳遞過來的實參后,依據(jù)這些數(shù)據(jù)執(zhí)行函數(shù)體里的語句。執(zhí)行結(jié)束后,就把控制返回到調(diào)用者發(fā)出函數(shù)調(diào)用的地方,繼續(xù)其執(zhí)行函數(shù)調(diào)用有返回值的函數(shù),是以函數(shù)表達(dá)式的方式調(diào)用函數(shù)名(實際參數(shù)表)無返回值的函數(shù),是以函數(shù)調(diào)用語句得方式調(diào)用函數(shù)名(實際參數(shù)表);無論是有返回值還是沒有返回值,函數(shù)調(diào)用時在實際參數(shù)表中列出的實參,必須與被調(diào)函數(shù)在定義時在形式參數(shù)表中所列形參的個數(shù)相等、類型相符、次序相同,各實參之間仍以逗號為分隔符函數(shù)調(diào)用函數(shù)返回值是通過return語句帶回到主調(diào)函數(shù)return(表達(dá)式);或return表達(dá)式;函數(shù)返回值類型由函數(shù)類型決定被調(diào)函數(shù)無return語句,返回值不確定函數(shù)定義為void類型,不帶回返回值函數(shù)可有多條return語句,但是一次運(yùn)行,只能執(zhí)行其中一條return語句。通過return語句只能返回一個值;如要返回多個值,只有借助于指針或數(shù)組函數(shù)調(diào)用例5.1:調(diào)用cube(intx)函數(shù)#include<stdio.h>longcube(intx){longa;a=x*x*x;return(a);}voidmain(){

inta;longm;

scanf("%d",&a);m=cube(a);

printf(“Thecudeof%dis%ld\n",a,m);

printf(“Thecudeof%dis%ld\n",a,cube(a));}函數(shù)調(diào)用例5.2:調(diào)用odd_even(intx)函數(shù)#include<stdio.h>voidodd_even(intx){if(x%2==0)

printf("Itiseven!\n");elseprintf("Itisodd!\n");}voidmain(){

inta;

scanf("%d",&a);

odd_even(a);}函數(shù)調(diào)用例5.3:定義名為power的函數(shù),計算x的n次方#include<stdio.h>doublepower(doublex,intn){doubles;for(s=1.0;n>0;n--){s=s*x;}return(s);}main(){doublea,pow;

inti;

scanf("%lf%d",&a,&i);

pow=power(a,i);

printf("value=%lf\n",pow);}函數(shù)調(diào)用例5.4:編寫判斷素數(shù)的函數(shù),求出100以內(nèi)素數(shù)所謂素數(shù)是指只能被1和自己整除的自然數(shù)除2以外,素數(shù)都是奇數(shù)定義函數(shù)prime(intn),接收調(diào)用者傳遞的參數(shù)剔除n=1的情況,單獨(dú)處理n=2的情況其余用循環(huán)來判斷:剔除偶數(shù),尋找從3到sqrt(n)之間的奇數(shù)是否存在能整除n的數(shù)。若有,則表明n不是素數(shù),返回值0;否則n為素數(shù),返回值1

函數(shù)調(diào)用例5.4:編寫判斷素數(shù)的函數(shù),求出100以內(nèi)素數(shù)#include<stdio.h>#include<math.h>intprime(intn){

inti;if(n==1)return0;elseif(n==2)return1;elseif(n%2==0)return0;else{for(i=3;i<=sqrt(n);i+=2)if(n%i==0)return0;}return1;}main(){

intk,x;for(x=1;x<=100;x++){k=prime(x);if(k==1)printf("%d\n",x);}}函數(shù)調(diào)用形式參數(shù):在定義函數(shù)時函數(shù)名后面括弧中的變量名,簡稱形參實際參數(shù):在調(diào)用函數(shù)時函數(shù)名后面括弧中的表達(dá)式,簡稱實參函數(shù)調(diào)用在函數(shù)被調(diào)用時才給形參分配內(nèi)存單元,當(dāng)調(diào)用結(jié)束時,形參所占內(nèi)存被釋放實參可以是常量、變量或表達(dá)式,但要求它們有確定的值實參與形參類型相同或賦值兼容,字符型與整型可以兼容實參與形參個數(shù)必須相等。在函數(shù)調(diào)用時,實參的值賦給與之相對應(yīng)的形參,單向值傳遞函數(shù)調(diào)用例5.5:定義名為swap的函數(shù),交換兩個形參#include<stdio.h>voidswap(intx,inty){

inttemp;temp=x;x=y;y=temp;

printf("x=%d,y=%d\n",x,y);}main(){

inta=10,b=20;

swap(a,b);

printf("a=%d,b=%d\n",a,b);}函數(shù)調(diào)用10a20b①調(diào)用前10a20b②

調(diào)用10x20y③

swap10a20b10x20ytemp10201010a20b④

調(diào)用結(jié)束函數(shù)調(diào)用例5.6:理解實參為普通變量時傳遞數(shù)據(jù)的過程當(dāng)以普通變量作為參數(shù)進(jìn)行數(shù)據(jù)傳遞時,調(diào)用者是把實參的值賦給被調(diào)用者的形參實參和形參占用的是內(nèi)存中不同的存儲區(qū),被調(diào)函數(shù)對形參的加工,是在形參自己的存儲區(qū)里進(jìn)行的,所以不會去改變和影響到實參被調(diào)用者要返回信息給調(diào)用者,只能通過return語句,不能借助于形參或?qū)崊ⅰK苑Q這種數(shù)據(jù)傳遞是單向值傳遞函數(shù)調(diào)用例5.6:理解實參為普通變量時傳遞數(shù)據(jù)的過程#include<stdio.h>intadd(intx,inty){

intz;

printf("&x=%p&y=%p\n",&x,&y);

printf("x=%dy=%d\n",x,y);x=x+10;y=y+15;z=x+y;

printf("x=%dy=%d\n",x,y);return(z);}main(){

inta,b,c;

printf("Pleaseentertwointegers:");

scanf("%d%d",&a,&b);

printf("&a=%p&b=%p\n",&a,&b);

printf("a=%db=%d\n",a,b);c=add(a,b);

printf("a=%db=%d\n",a,b);

printf("c=%d\n",c);}函數(shù)調(diào)用例5.7:理解實參為數(shù)組名時傳遞數(shù)據(jù)的過程用數(shù)組名作為函數(shù)參數(shù)時,應(yīng)該在調(diào)用函數(shù)和被調(diào)用函數(shù)中分別定義數(shù)組形參數(shù)組與實參數(shù)組共享同一個存儲區(qū)雙向傳遞,對形參數(shù)組所做的操作可能會影響到實參數(shù)組元素的值形參數(shù)組和實參數(shù)組的長度可以不相同,因為在調(diào)用時,只傳送首地址而不檢查形參數(shù)組的長度函數(shù)調(diào)用例5.7:理解實參為數(shù)組名時傳遞數(shù)據(jù)的過程#include<stdio.h>intadd(intx[10]){

intk,temp=0;

printf("x=%p

&x[4]=%p\n",x,&x[4]);for(k=0;k<10;k++){temp+=x[k];

x[k]+=10;

printf("x[%d]=%d",k,x[k]);}

printf("Thetemp=%d\n",temp);returntemp;}main(){

inta[10]={1,2,3,4,5,6,7,8,9,10},sum,i;

printf("a=%p&a[4]=%p\n",a,&a[4]);sum=add(a);for(i=0;i<10;i++)printf("a[%d]=%d",i,a[i]);

printf("Thesum=%d\n",sum);}函數(shù)原型說明調(diào)用一個用戶函數(shù)時,必須先保證被調(diào)用的用戶函數(shù)已經(jīng)存在。所以在上面所舉的每個例子里,都是把被調(diào)函數(shù)放在了調(diào)用者的前面若調(diào)用和被調(diào)用函數(shù)的位置顛倒了,當(dāng)被調(diào)函數(shù)返回值類型是int、char時,不會有什么關(guān)系;若被調(diào)函數(shù)返回值的類型是float、double或void等,那么編譯時就會給出出錯信息函數(shù)原型說明C語言有兩種解決的辦法:一是把被調(diào)用者與調(diào)用者的位置重新放正確二是保持這種顛倒的位置關(guān)系,但在整個程序最前面或在調(diào)用函數(shù)里先對被調(diào)函數(shù)做一個說明,這就是所謂的函數(shù)原型說明函數(shù)原型說明函數(shù)原型說明的一般格式是函數(shù)類型函數(shù)名(形參類型表);函數(shù)原型說明與函數(shù)定義有兩點(diǎn)區(qū)別:一是函數(shù)定義中給出的是形式參數(shù)表,由<類型><參數(shù)>對組成,函數(shù)原型說明里給出的是形參類型表,它只列出<類型>二是函數(shù)原型說明要以分號為結(jié)尾,是一條說明語句函數(shù)原型說明如果已在所有函數(shù)定義之前,在文件的開頭,在函數(shù)的外部已說明了函數(shù)類型,則在各個主調(diào)函數(shù)中不必對所調(diào)用的函數(shù)再做說明函數(shù)的返回值為整型或字符型時,可以不進(jìn)行類型說明,系統(tǒng)按整型處理被調(diào)用函數(shù)定義在主調(diào)函數(shù)之前,可以不進(jìn)行類型說明函數(shù)原型說明例5.8:將任意兩個字符串連接成一個字符串

str1str2str3'H''e''l''l''o''''\0''c''h''i''n''a''!''\0's1s2s3調(diào)用前調(diào)用連接'H''e''l''l''o'''for(i=0;s1[i]!='\0';i++)s3[i]=s1[i];'c''h''i''n''a''!'for(j=0;s2[j]!='\0';j++)s3[i+j]=s2[j];'\0'補(bǔ)\0s3[i+j]='\0';調(diào)用結(jié)束函數(shù)原型說明例5.8:將任意兩個字符串連接成一個字符串#include<stdio.h>voidmergestr(chars1[],chars2[],chars3[]);

voidmain(){charstr1[]={"Hello"},str2[]={"china!"};charstr3[40];

mergestr(str1,str2,str3);

printf("%s\n",str3);}voidmergestr(chars1[],chars2[],chars3[]){

inti,j;for(i=0;s1[i]!='\0';i++)//將s1復(fù)制到s3中

{s3[i]=s1[i];}for(j=0;s2[j]!='\0';j++)//將s2復(fù)制到s3的后邊

{s3[i+j]=s2[j];}s3[i+j]='\0';//置字符串結(jié)束標(biāo)志}函數(shù)原型說明例5.9:用冒泡法將10個整數(shù)按照從小到大排序#include<stdio.h>voidsort(intb[],intn);voidprintarr(intb[],intn);

main(){

inta[10]={11,22,63,97,58,80,45,32,73,36};

printf("Beforesort:\n");printarr(a,10);

sort(a,10);

printf("Aftersort:\n");

printarr(a,10);}函數(shù)原型說明例5.9:用冒泡法將10個整數(shù)排序voidprintarr(intb[10],intn){

inti;for(i=0;i<n;i++)printf("%5d",b[i]);

printf("\n");}voidsort(intb[],intn){

inti,j,temp,flag;for(i=1;i<n;i++){flag=0;for(j=0;j<n-i;j++)if(b[j]>b[j+1]){temp=b[j];b[j]=b[j+1];b[j+1]=temp;flag=1;}if(flag==0)break;}}函數(shù)原型說明a[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7]a[8]a[9]

b[0]b[1]b[2]b[3]b[4]b[5]b[6]b[7]b[8]b[9]11226397588045327336(a)排序前a[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7]a[8]a[9]b[0]b[1]b[2]b[3]b[4]b[5]b[6]b[7]b[8]b[9]11223236455863738097(b)排序后4000b形參b實際是一個可以存放地址的變量a:4000實參賦給形參首地址:

2000首地址:4000main函數(shù){……調(diào)用函數(shù)A;

……}函數(shù)的嵌套調(diào)用嵌套的執(zhí)行過程函數(shù)B{

……

……

……}②①③④⑤⑦⑥⑧⑨函數(shù)A{……

調(diào)用函數(shù)B;

……}函數(shù)的嵌套調(diào)用例5.10:求三個數(shù)中最大數(shù)和最小數(shù)的差值#include<stdio.h>int

dif(intx,inty,intz);int

max(intx,inty,intz);int

min(intx,inty,intz);voidmain(){

inta,b,c,d;

scanf("%d%d%d",&a,&b,&c);

d=dif(a,b,c);

printf(“max-min=%d\n",d);}int

dif(intx,inty,intz){returnmax(x,y,z)-min(x,y,z);}函數(shù)的嵌套調(diào)用例5.10:求三個數(shù)中最大數(shù)和最小數(shù)的差值int

max(intx,inty,intz){

intr;r=(x>y)?x:y;

return((r>z)?r:z);}int

min(intx,inty,intz){

intr;r=(x<y)?x:y;

return((r<z)?r:z);}函數(shù)的遞歸調(diào)用函數(shù)直接或間接的調(diào)用自身叫函數(shù)的遞歸調(diào)用f()調(diào)f調(diào)f2調(diào)f1f1()f2()int

f(intx){

inty,z;……

z=f(y);…….return(2*z);}int

f1(intx){

inty,z;……

z=f2(y);…….return(2*z);}int

f2(intt){

inta,c;……

c=f1(a);…….return(3+c);}直接遞歸間接遞歸函數(shù)的遞歸調(diào)用例5.11:求n!以求4的階乘為例:4!=4*3!,3!=3*2!,2!=2*1!,1!=1,0!=1遞歸公式:n!=1當(dāng)n=1時n!=n*(n-1)! 當(dāng)n>1時遞歸結(jié)束條件:當(dāng)n=1或n=0時,n!=1函數(shù)的遞歸調(diào)用例5.10:求n!#include<stdio.h>floatfac(intn){floatf=0;

if(n<0)printf("n<0,error!");elseif((n==0)||(n==1))f=1;elsef=n*fac(n-1);returnf;}main(){

intn;floaty;

scanf("%d",&n);

y=fac(n);

printf("%d!=%-10.0f\n",n,y);}函數(shù)的遞歸調(diào)用例5.12:漢諾塔:有A,B,C三個塔座,A上套有n個直徑不同的圓盤,按直徑從小到大疊放,形如寶塔,編號1,2,3……n。要求將n個圓盤從A移到C,疊放順序不變,移動中遵循下列原則:每次只能移一個圓盤圓盤可在三個塔座上任意移動任何時刻,每個塔座上不能將大盤壓到小盤上ABC函數(shù)的遞歸調(diào)用分析3個盤子的情況:1.將A座上2個盤子移到B座(借助C)2.將A座上1個盤子移到C座3.將B座上2個盤子移到C座(借助A)其中第2步可以直接實現(xiàn)第1、3步還需要遞歸分解A B CA B CA B C函數(shù)的遞歸調(diào)用遞歸分解:第1步——將A座上2個盤子移到B座(借助C),分解為:1.1將A上一個盤子從A移到C;1.2將A上一個盤子從A移到B;1.3將C上一個盤子從C移到B。A B C1.1A B C1.2A B C1.3函數(shù)的遞歸調(diào)用遞歸分解:第3步——將B座上2個盤子移到C座(借助A),分解為:3.1將B上一個盤子從B移到A3.2將B上一個盤子從B移到C3.3將A上一個盤子從A移到CA B C3函數(shù)的遞歸調(diào)用將以上綜合起來,可得到移動3個盤子的步驟為:A→C,A→B,C→BA→CB→A,B→C,A→C共經(jīng)歷7(=23-1)步??梢酝浦苿觧個盤子需要經(jīng)歷2n

-1。函數(shù)的遞歸調(diào)用解決方法:n=1時,直接把圓盤從A移到Cn>1時,先把上面n-1個圓盤從A移到B,然后將n號盤從A移到C,再將n-1個盤從B移到C。即把求解n個圓盤的Hanoi問題轉(zhuǎn)化為求解n-1個圓盤的Hanoi問題,依次類推,直至轉(zhuǎn)化成只有一個圓盤的Hanoi問題函數(shù)的遞歸調(diào)用函數(shù)move完成將第k個盤子從A移動到Cmove(intno,charfrom,charto);no:盤子編號,from:源柱to:目的柱函數(shù)hanoi完成將n個盤子從A移動到Chanoi(intn,charone,chartwo,charthree)借助two將n個盤子從one移動到three函數(shù)的遞歸調(diào)用將n個盤子借助B從A移動到C,實現(xiàn)過程如下:函數(shù)調(diào)用’A’→one,’B’

two,’C’

three步驟1:hanoi(n-1,one,two,three);借助C柱子將n-1個盤子從A移到B步驟2:move(n,one,three);將第n個盤子從A柱子移動到C柱子步驟3:hanoi(n-1,two,one,three);借助A柱子將n-1個盤子從B移到C函數(shù)的遞歸調(diào)用例5.12:漢諾塔:有A,B,C三個塔座,A上套有n個直徑不同的圓盤,按直徑從小到大疊放,形如寶塔,編號1,2,3……n。要求將n個圓盤從A移到C,疊放順序不變,移動中遵循下列原則:每次只能移一個圓盤圓盤可在三個塔座上任意移動任何時刻,每個塔座上不能將大盤壓到小盤上#include<stdio.h>voidmove(intno,charfrom,charto){printf("Move%3d:%c-->%c\n",no,from,to);}voidhanoi(intn,charone,chartwo,charthree){if(n==1)move(n,one,three);else{hanoi(n-1,one,three,two);

move(n,one,three);hanoi(n-1,two,one,three);}}voidmain(){

intn;

printf("Inputthenumberofdiskes:");

scanf("%d",&n);

printf("Thesteptomoving%3ddiskes:\n",n);

hanoi(n,'A','B','C');}變量的作用域與生存期變量的作用域指變量在某區(qū)域內(nèi)有效分為局部變量與全局變量變量的生存期指變量在某一時刻存在分為靜態(tài)變量與動態(tài)變量變量的作用域與生存期在所有函數(shù)之外定義的變量稱全局變量,它可被程序中的所有函數(shù)使用,其有效范圍為:從定義變量的位置開始到本源文件的結(jié)束在函數(shù)或復(fù)合語句里面定義的變量稱局部變量,它只能在說明它的范圍內(nèi)使用。即凡在一對花括號內(nèi)說明的變量,就是局部變量,它只能在該括號內(nèi)使用。出了這個括號,該變量就不能使用了作為函數(shù)的形參。這類變量也是局部變量,其作用就是用于接收調(diào)用者傳遞過來的實參數(shù)據(jù)。越出了函數(shù)范圍,該變量就不能使用了變量的作用域與生存期在C語言中,稱一個變量的作用范圍為變量的作用域。由于每個變量都有自己的作用域,因此在不同函數(shù)內(nèi)說明的局部變量可使用相同的變量名,類型也可以不一樣,它們不會因為名字相同而互相干擾C語言規(guī)定,在一個源程序文件中,當(dāng)所說明的全局變量與某個函數(shù)內(nèi)說明的局部變量同名時,那么在該局部變量的作用域,全局變量不起作用變量的作用域與生存期例5.13:變量的作用域#include<stdio.h>sub(){

inta=5,b=6;

printf("sub:a=%d,b=%d\n",a,b);}main(){

inta=3,b=4;

printf("main:a=%d,b=%d\n",a,b);sub();

printf("main:a=%d,b=%d\n",a,b);}變量的作用域與生存期變量的存儲類型指數(shù)據(jù)在內(nèi)存中存儲的方式,即編譯器為變量分配內(nèi)存的方式,它決定變量的生存期動態(tài)存儲方式根據(jù)需要臨時分配存儲空間,離開即釋放靜態(tài)存儲方式在程序運(yùn)行期間分配固定的存儲空間不釋放變量的作用域與生存期程序區(qū)靜態(tài)存儲區(qū)動態(tài)存儲區(qū)操作系統(tǒng)等系統(tǒng)區(qū)用戶區(qū)用來存放C語言程序運(yùn)行代碼用來存放變量,在這個區(qū)域中存儲的變量被稱作靜態(tài)變量。在程序開始執(zhí)行時全局變量全部放在靜態(tài)存儲區(qū)中,程序執(zhí)行完畢就釋放。在程序執(zhí)行過程中它們占據(jù)固定的存儲單元,而不是動態(tài)地進(jìn)行分配和釋放用來存放變量以及進(jìn)行函數(shù)調(diào)用時的現(xiàn)場信息和函數(shù)返回地址等,在這個區(qū)域存儲的變量稱之為動態(tài)變量,如形參變量、函數(shù)體內(nèi)部定義的動態(tài)局部變量。對于存放于動態(tài)存儲區(qū)的變量,是在函數(shù)調(diào)用開始時才分配動態(tài)存儲空間,函數(shù)運(yùn)行結(jié)束時釋放這些空間變量的作用域與生存期變量四種存儲類別externregisterautostatic變量的作用域與生存期自動變量(auto)進(jìn)入語句塊時自動申請內(nèi)存,退出時自動釋放內(nèi)存標(biāo)準(zhǔn)定義格式

:auto類型名變量名;動態(tài)局部變量缺省的存儲類型不初始化時,值是不確定的變量的作用域與生存期靜態(tài)變量(static)在變量類型前面用static修飾:staticinti;在定義時未賦初值,則系統(tǒng)自動賦初值0賦初值只一次,變量的值可以保存到下次進(jìn)入函數(shù),使函數(shù)具有記憶功能變量的作用域與生存期例5.14:靜態(tài)變量值具有可繼承性#include<stdio.h>voidFunc(void){staticinttimes=1;printf("times=%d\n",times++);}main(){

inti;for(i=0;i<10;i++){Func();}}變量的作用域與生存期寄存器變量(register)使用頻率比較高的變量聲明為register,可以使程序更小、執(zhí)行速度更快register類型名變量名;現(xiàn)代編譯器有能力自動把普通變量

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論