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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

(1)內存中字節的編號稱為字節的地址。內存中連續的若干字節稱為一段內存空間,這段空間的第一個字節的地址稱為這段空間的首地址,簡稱為這段空間的地址。一個地址“指向”它所對應的內存空間。地址p所指向的內存空間用*p表示。指針回顧……50215022502350245025502650275028502950305031503250335034……-58950335024p*p*5033*5024(2)變量代表了一段內存空間,它有地址,它存放的數稱為值。什么類型的變量存放什么類型的數。把一個數存放在變量中稱為賦值。(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七、函數7.5特殊類型的參數(1)指針作為參數指針作為參數時,也是值傳遞注意形參的類型是指針。形參也是變量main(){intx,y;x=20;y=funx(&x);......}intfunx(int*s){.......}七、函數7.5特殊類型的參數(1)指針作為參數輸出是什么?main(){intx,*u,*v;x=20;u=&x;fx(u);printf("%d\n",x);}fx(int*e){*e=30;}30exuv七、函數7.5特殊類型的參數(1)指針作為參數以下程序輸出什么?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七、函數7.5特殊類型的參數(1)指針作為參數以下程序輸出什么?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七、函數7.5特殊類型的參數(1)指針作為參數main(){char*s="abcdef",*q;voidfun1(char*c);/*?*/fun1(s+3);puts(s);}voidfun1(char*c){(*c)++;}abceef七、函數7.5特殊類型的參數(1)指針作為參數返回指針的函數數據類型*函數名(形參列表){函數體return(表達式);}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);}七、函數7.5特殊類型的參數(1)指針作為參數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七、函數7.5特殊類型的參數(1)指針作為參數返回指針的函數數據類型*函數名(形參列表){函數體return(表達式);}對于函數char*abc(inta,charb){……}以下調用是否正確?(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);對錯,函數值類型不符錯,s是常量錯,參數類型不符七、函數7.5特殊類型的參數(1)指針作為參數返回指針的函數數據類型*函數名(形參列表){函數體return(表達式);}對于調用inta,*b;char*x,s[100],c;……c=fun(24,s[5],s+7,*b);請寫出函數fun的函數頭charfun(intx,chary,char*z,intw)七、函數7.5特殊類型的參數(1)指針作為參數(2)數組作為參數先看一個例子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七、函數數組作為參數看似將整個數組傳遞給函數,而且可以在函數中改變數組。分析輸出結果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實際上數組傳遞時只是傳遞一個首地址的值。形參inty[]相當于int*yvoidfun2(int*y){*(y+2)=9;*(y+3)=*(y+1)-*(y+4);}七、函數分別用數組和指針的方法編寫一個函數,刪除一個字符串中的第一個字符。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);}七、函數用數組法:編寫一個函數,求一個字符在一個字符串中的第一次出現的位置(下標),如果不出現,返回-1。用指針法:編寫一個函數,求一個字符在一個字符串中的第一次出現的位置(指針),如果不出現,返回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;}七、函數7.5特殊類型的參數(1)指針作為參數(2)數組作為參數(3)結構體作為參數結構體變量作為參數就如同整數、實數一樣。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七、函數7.5特殊類型的參數(1)指針作為參數(2)數組作為參數(3)結構體作為參數結構體變量作為參數就如同整數、實數一樣。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;}七、函數7.5特殊類型的參數7.6指向函數的指針C語言編譯后的二進制程序在運行時要讀入內存。一個函數中的語句在內存中連續存放,函數名代表首地址??梢远x指向函數的指針變量。如int(*p)();定義一個指針變量p,它的值是某一個函數的首地址。int表示函數類型。main(){char(*p)();p=fun1;p=fun2;...}charfun1(inta,floatb){....}charfun2(char*s){...}七、函數7.5特殊類型的參數7.6指向函數的指針C語言編譯后的二進制程序在運行時要讀入內存。一個函數中的語句在內存中連續存放,函數名代表首地址。可以定義指向函數的指針變量。如int(*p)();定義一個指針變量p,它的值是某一個函數的首地址。int表示函數類型。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){...}七、函數7.5特殊類型的參數7.6指向函數的指針C語言編譯后的二進制程序在運行時要讀入內存。一個函數中的語句在內存中連續存放,函數名代表首地址??梢远x指向函數的指針變量。如int(*p)();定義一個指針變量p,它的值是某一個函數的首地址。int表示函數類型。以下程序有什么錯誤?main(){char(*p)();p=fun1();p=fun2;...}charfun1(inta,floatb){....}intfun2(char*s){...}多括號類型不符七、函數7.5特殊類型的參數7.6指向函數的指針C語言編譯后的二進制程序在運行時要讀入內存。一個函數中的語句在內存中連續存放,函數名代表首地址??梢远x指向函數的指針變量。如int(*p)();定義一個指針變量p,它的值是某一個函數的首地址。int表示函數類型。以下程序有什么錯誤?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應寫成(*p)七、函數7.5特殊類型的參數7.6指向函數的指針7.7命令行參數main(intargc,char*argv[])main(intargc,char**argv)main(intargnum,char**arg)第一個形參表示參數個數(包括程序名)第二個形參是字符串數組,每一個字符串表示一個參數。以下程序可以顯示程序名及各個參數:(運行演示)main(intargc,char**argv){printf("thefilename:%s",argv[0]);printf("\nand%darguments:\n",argc-1);while(--argc>0)puts(*(++argv));}七、函數7.5特殊類型的參數7.6指向函數的指針7.7命令行參數main(intargc,char*argv[])main(intargc,char**argv)main(intargnum,char**arg)第一個形參表示參數個數(包括程序名)第二個形參是字符串數組,每一個字符串表示一個參數。以下程序用于復制文件,文件名由命令行輸入:main(intargc,char**argv){FILE*f1,*f2;charc;if(argc!=3){printf("參數不對");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);}七、函數7.5特殊類型的參數7.6指向函數的指針7.7命令行參數main(intargc,char*argv[])main(intargc,char**argv)main(int

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論