專升本 C語言課件 C07(10) 函數(shù)_第1頁
專升本 C語言課件 C07(10) 函數(shù)_第2頁
專升本 C語言課件 C07(10) 函數(shù)_第3頁
專升本 C語言課件 C07(10) 函數(shù)_第4頁
專升本 C語言課件 C07(10) 函數(shù)_第5頁
已閱讀5頁,還剩21頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

(1)內(nèi)存中字節(jié)的編號(hào)稱為字節(jié)的地址。內(nèi)存中連續(xù)的若干字節(jié)稱為一段內(nèi)存空間,這段空間的第一個(gè)字節(jié)的地址稱為這段空間的首地址,簡稱為這段空間的地址。一個(gè)地址“指向”它所對應(yīng)的內(nèi)存空間。地址p所指向的內(nèi)存空間用*p表示。指針回顧……50215022502350245025502650275028502950305031503250335034……-58950335024p*p*5033*5024(2)變量代表了一段內(nèi)存空間,它有地址,它存放的數(shù)稱為值。什么類型的變量存放什么類型的數(shù)。把一個(gè)數(shù)存放在變量中稱為賦值。(3)指針變量也是變量,但只能存放地址。如果p是指針變量,p指向u表示p的值指向ux4……50215022502350245025502650275028502950305031503250335034……5022x1x2x362G1.36輸出是什么?main(){intx,*u,*v;x=20;u=&x;v=u;*v=30;printf("%d\n",x);}v……50215022502350245025502650275028502950305031503250335034……xu七、函數(shù)7.5特殊類型的參數(shù)(1)指針作為參數(shù)指針作為參數(shù)時(shí),也是值傳遞注意形參的類型是指針。形參也是變量main(){intx,y;x=20;y=funx(&x);......}intfunx(int*s){.......}七、函數(shù)7.5特殊類型的參數(shù)(1)指針作為參數(shù)輸出是什么?main(){intx,*u,*v;x=20;u=&x;fx(u);printf("%d\n",x);}fx(int*e){*e=30;}30exuv七、函數(shù)7.5特殊類型的參數(shù)(1)指針作為參數(shù)以下程序輸出什么?main(){inta=5,b=2;b=yx(&a);printf("%d,%d\n",a,b);}intyx(int*x){intt;t=*x*2;++*x;returnt;}2,5七、函數(shù)7.5特殊類型的參數(shù)(1)指針作為參數(shù)以下程序輸出什么?main(){inta=5,b=2;voidyx(int*a,int*b);/*?*/yx(&a,&b);printf("%d,%d\n",a,b);}voidyx(int*a,int*b){/*void表示什么*/intt;t=*a;*a=*b;*b=t;}2,5七、函數(shù)7.5特殊類型的參數(shù)(1)指針作為參數(shù)main(){char*s="abcdef",*q;voidfun1(char*c);/*?*/fun1(s+3);puts(s);}voidfun1(char*c){(*c)++;}abceef七、函數(shù)7.5特殊類型的參數(shù)(1)指針作為參數(shù)返回指針的函數(shù)數(shù)據(jù)類型*函數(shù)名(形參列表){函數(shù)體return(表達(dá)式);}int*abc(int*a,int*b){int*t;if(*a>*b)t=a;elset=b;returnt;}main(){intx=20,y=30,*p;p=abc(&x,&y);printf("%d\n",*p);}七、函數(shù)7.5特殊類型的參數(shù)(1)指針作為參數(shù)main(){char*s="abcdef",*q;char*fun1(char*s);/*?*/q=fun1(s);printf("%c%c\n",*s,*q)}char*fun1(char*s){while(*s)s++;s--;returns;}af七、函數(shù)7.5特殊類型的參數(shù)(1)指針作為參數(shù)返回指針的函數(shù)數(shù)據(jù)類型*函數(shù)名(形參列表){函數(shù)體return(表達(dá)式);}對于函數(shù)char*abc(inta,charb){……}以下調(diào)用是否正確?(A)printf("%s",abc(5,60));(B)inta;……a=abc(6,'p');(C)chars[10];……s=abc('6','7');(D)char*e;……abc(e,e+1);對錯(cuò),函數(shù)值類型不符錯(cuò),s是常量錯(cuò),參數(shù)類型不符七、函數(shù)7.5特殊類型的參數(shù)(1)指針作為參數(shù)返回指針的函數(shù)數(shù)據(jù)類型*函數(shù)名(形參列表){函數(shù)體return(表達(dá)式);}對于調(diào)用inta,*b;char*x,s[100],c;……c=fun(24,s[5],s+7,*b);請寫出函數(shù)fun的函數(shù)頭charfun(intx,chary,char*z,intw)七、函數(shù)7.5特殊類型的參數(shù)(1)指針作為參數(shù)(2)數(shù)組作為參數(shù)先看一個(gè)例子main(){inta[5]={1,2,3,4,5},i;int*x=a;x[2]=10;for(i=0;i<5;i++)printf("%d",a[i]);}121045七、函數(shù)數(shù)組作為參數(shù)看似將整個(gè)數(shù)組傳遞給函數(shù),而且可以在函數(shù)中改變數(shù)組。分析輸出結(jié)果main(){inta[5]={1,2,3,4,5},i;voidfun2(inta[]);fun2(a)for(i=0;i<5;i++)printf("%d",a[i]);}voidfun2(inty[]){y[2]=9;y[3]=y[1]-y[4];}129-35實(shí)際上數(shù)組傳遞時(shí)只是傳遞一個(gè)首地址的值。形參inty[]相當(dāng)于int*yvoidfun2(int*y){*(y+2)=9;*(y+3)=*(y+1)-*(y+4);}七、函數(shù)分別用數(shù)組和指針的方法編寫一個(gè)函數(shù),刪除一個(gè)字符串中的第一個(gè)字符。voiddelf(chars[]){inti;for(i=0;s[i];i++)s[i]=s[i+1];}voiddelf(char*s){char*p;for(p=s;*p;p++)*p=*(p+1);}七、函數(shù)用數(shù)組法:編寫一個(gè)函數(shù),求一個(gè)字符在一個(gè)字符串中的第一次出現(xiàn)的位置(下標(biāo)),如果不出現(xiàn),返回-1。用指針法:編寫一個(gè)函數(shù),求一個(gè)字符在一個(gè)字符串中的第一次出現(xiàn)的位置(指針),如果不出現(xiàn),返回NULL。intfindf(chars[],charc){inti;for(i=0;s[i];i++)if(c==s[i])returni;return–1;}intfindf(char*s,charc){char*p;for(p=s;*p;p++)if(c==*p)returnp;returnNULL;}七、函數(shù)7.5特殊類型的參數(shù)(1)指針作為參數(shù)(2)數(shù)組作為參數(shù)(3)結(jié)構(gòu)體作為參數(shù)結(jié)構(gòu)體變量作為參數(shù)就如同整數(shù)、實(shí)數(shù)一樣。structst{inta;charb};main(){structstc,d;structstfun3(structsta);/*?*/c.a=8;c.b='k';d=fun3(c);printf(%d,%c\n",d.b,d.a);}structstfun3(structsta){a.a++;returna;}k,9七、函數(shù)7.5特殊類型的參數(shù)(1)指針作為參數(shù)(2)數(shù)組作為參數(shù)(3)結(jié)構(gòu)體作為參數(shù)結(jié)構(gòu)體變量作為參數(shù)就如同整數(shù)、實(shí)數(shù)一樣。structst{inta;charb};typedefstructstST;main(){STc,d;STfun3(structsta);/*?*/c.a=8;c.b='k';d=fun3(c);printf(%d,%c\n",d.b,d.a);}STfun3(STa){a.a++;returna;}七、函數(shù)7.5特殊類型的參數(shù)7.6指向函數(shù)的指針C語言編譯后的二進(jìn)制程序在運(yùn)行時(shí)要讀入內(nèi)存。一個(gè)函數(shù)中的語句在內(nèi)存中連續(xù)存放,函數(shù)名代表首地址??梢远x指向函數(shù)的指針變量。如int(*p)();定義一個(gè)指針變量p,它的值是某一個(gè)函數(shù)的首地址。int表示函數(shù)類型。main(){char(*p)();p=fun1;p=fun2;...}charfun1(inta,floatb){....}charfun2(char*s){...}七、函數(shù)7.5特殊類型的參數(shù)7.6指向函數(shù)的指針C語言編譯后的二進(jìn)制程序在運(yùn)行時(shí)要讀入內(nèi)存。一個(gè)函數(shù)中的語句在內(nèi)存中連續(xù)存放,函數(shù)名代表首地址??梢远x指向函數(shù)的指針變量。如int(*p)();定義一個(gè)指針變量p,它的值是某一個(gè)函數(shù)的首地址。int表示函數(shù)類型。main(){charx,y;char(*p)();p=fun1;x=(*p)(3,0.4);/*x=fun1(3,0.4);*/p=fun2;y=(*p)("abc");/*y=fun2("abc");*/...}charfun1(inta,floatb){....}charfun2(char*s){...}七、函數(shù)7.5特殊類型的參數(shù)7.6指向函數(shù)的指針C語言編譯后的二進(jìn)制程序在運(yùn)行時(shí)要讀入內(nèi)存。一個(gè)函數(shù)中的語句在內(nèi)存中連續(xù)存放,函數(shù)名代表首地址。可以定義指向函數(shù)的指針變量。如int(*p)();定義一個(gè)指針變量p,它的值是某一個(gè)函數(shù)的首地址。int表示函數(shù)類型。以下程序有什么錯(cuò)誤?main(){char(*p)();p=fun1();p=fun2;...}charfun1(inta,floatb){....}intfun2(char*s){...}多括號(hào)類型不符七、函數(shù)7.5特殊類型的參數(shù)7.6指向函數(shù)的指針C語言編譯后的二進(jìn)制程序在運(yùn)行時(shí)要讀入內(nèi)存。一個(gè)函數(shù)中的語句在內(nèi)存中連續(xù)存放,函數(shù)名代表首地址。可以定義指向函數(shù)的指針變量。如int(*p)();定義一個(gè)指針變量p,它的值是某一個(gè)函數(shù)的首地址。int表示函數(shù)類型。以下程序有什么錯(cuò)誤?main(){charx,y;char(*p)();p=fun1;x=*p(3,0.4);/*x=fun1(3,0.4);*/p=fun2;y=*p("abc");/*y=fun2("abc");*/...}charfun1(inta,floatb){....}charfun2(char*s){...}*p應(yīng)寫成(*p)七、函數(shù)7.5特殊類型的參數(shù)7.6指向函數(shù)的指針7.7命令行參數(shù)main(intargc,char*argv[])main(intargc,char**argv)main(intargnum,char**arg)第一個(gè)形參表示參數(shù)個(gè)數(shù)(包括程序名)第二個(gè)形參是字符串?dāng)?shù)組,每一個(gè)字符串表示一個(gè)參數(shù)。以下程序可以顯示程序名及各個(gè)參數(shù):(運(yùn)行演示)main(intargc,char**argv){printf("thefilename:%s",argv[0]);printf("\nand%darguments:\n",argc-1);while(--argc>0)puts(*(++argv));}七、函數(shù)7.5特殊類型的參數(shù)7.6指向函數(shù)的指針7.7命令行參數(shù)main(intargc,char*argv[])main(intargc,char**argv)main(intargnum,char**arg)第一個(gè)形參表示參數(shù)個(gè)數(shù)(包括程序名)第二個(gè)形參是字符串?dāng)?shù)組,每一個(gè)字符串表示一個(gè)參數(shù)。以下程序用于復(fù)制文件,文件名由命令行輸入:main(intargc,char**argv){FILE*f1,*f2;charc;if(argc!=3){printf("參數(shù)不對");exit(0);}if((f1=fopen(argv[1],"rb"))==NULL)exit(0);if((f2=fopen(argv[2],"wb"))==NULL)exit(0);while(!feof(f1)){c=fgetc(f1);fputc(c,f2);}fclose(f1);fclose(f2);}七、函數(shù)7.5特殊類型的參數(shù)7.6指向函數(shù)的指針7.7命令行參數(shù)main(intargc,char*argv[])main(intargc,char**argv)main(int

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論