C語言程序設(shè)計(第2版)課件 藺德軍13 函數(shù)(二)_第1頁
C語言程序設(shè)計(第2版)課件 藺德軍13 函數(shù)(二)_第2頁
C語言程序設(shè)計(第2版)課件 藺德軍13 函數(shù)(二)_第3頁
C語言程序設(shè)計(第2版)課件 藺德軍13 函數(shù)(二)_第4頁
C語言程序設(shè)計(第2版)課件 藺德軍13 函數(shù)(二)_第5頁
已閱讀5頁,還剩19頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

函數(shù)(二)

本章主要內(nèi)容數(shù)組參數(shù)的傳遞遞歸變量的存儲類型constextern作用

函數(shù)指針主函數(shù)的參數(shù)一維數(shù)組傳遞舉例#include<stdio.h>voidfun(inta[]){ inti; for(i=2;i<5;i++)a[i]++;}intmain(){intb[10]={0,1,2,3,4,5,6,7,8,9},i;fun(&b[3]);for(i=0;i<10;i++)printf("%d,",b[i]); printf("\n");}二維數(shù)組傳遞與二維數(shù)組對應(yīng)的指針是數(shù)組指針voidfun(intp[N][10]);voidfun(intp[][10]);voidfun(int(*p)[10]);/*數(shù)組指針做為參數(shù)*/#include"stdio.h"voidainc(intp[][5],intline,intcol){ inti,j; for(i=0;i<line;i++) for(j=0;j<col;j++)p[i][j]++;}intmain(){ inta[3][5]={0},i,j; ainc(a,3,5);/*傳遞處理的首地址,和要處理元素個數(shù)*/ for(i=0;i<3;i++){ for(j=0;j<5;j++)

printf("%d",a[i][j]); printf("\n");

}}指針數(shù)組的傳遞與指針數(shù)組名對應(yīng)的指針是指針的指針voidfun(int**p)voidfun(int*p[])voidfun(int*p[N])/*三種形式具有相同含義*/

#include"stdio.h"#include"string.h"voidsort(char**pp,intlen){inti,j; char*t; for(i=0;i<len-1;i++) for(j=i+1;j<len;j++) /*字符串逆序,則調(diào)整b[i]指針的次序*/ if(strcmp(pp[i],pp[j])>0){ t=pp[i]; pp[i]=pp[j]; pp[j]=t; } }intmain(){ chara[5][20]={"she","he","we","me","you"},*b[5]; inti; for(i=0;i<5;i++)b[i]=a[i]; sort(b,5); for(i=0;i<5;i++)puts(b[i]);}遞歸一個函數(shù)間接或直接調(diào)用自己,稱為遞歸,直接調(diào)用自己成為直接遞歸,一個函數(shù)調(diào)用其他函數(shù),而其他函數(shù)在調(diào)用過程中又調(diào)用到這個函數(shù),稱為間接遞歸遞歸示例-1#include"stdio.h"longintfact(intn){if(n<=1)return1;elsereturn(n*fact(n-1));}intmain(){inta;scanf("%d",&a);printf("%d\n",fact(a));}遞歸示例-2//判斷下面程序的輸出#include<stdio.h>voidf(inta){ printf("%d\n",a*a); if(a>1)f(a-1); printf("%d\n",a*a*a);}intmain(){f(4);}遞歸示例-3漢諾塔#include<stdio.h>voidhano(intn,chara,charb,charc){ if(n==1)printf("mov%dfrom%c->%c\n",n,a,c); else{ hano(n-1,a,c,b); printf("mov%dfrom%c->%c\n",n,a,c); hano(n-1,b,a,c); }};intmain(){ hano(3,'A','B','C');}變量的存儲類型static靜態(tài)變量靜態(tài)變量是在程序編譯連接時就分配的內(nèi)存單元,在整個程序運行期間使用固定的存儲單元,直到整個程序退出對應(yīng)單元才釋放auto動態(tài)變量動態(tài)變量是在函數(shù)被調(diào)用執(zhí)行時,才分配單元,隨著函數(shù)被執(zhí)行而分配,隨著函數(shù)執(zhí)行結(jié)束而釋放,auto關(guān)鍵字可以省略register寄存器變量寄存器變量是請求計算機把此變量放入CPU的寄存器內(nèi),但如果沒有寄存器可使用,或系統(tǒng)不支持此功能,則此變量等同于動態(tài)變量變量類型及存儲區(qū)

static與auto舉例常量const當我們希望一個單元的值不能被改變時,可以在聲明一個變量的語句前加const關(guān)鍵字,這樣的單元稱為常量//舉例:#include"stdio.h"voidg(constint*b,constint&c){(*b)++;//errorb++;c++;//errorprintf("%d",b);}intmain(){constinta=1;a=3;//errorinte=5,f=6;g(&e,f);}外部(extern)變量、函數(shù)當引用一個在其他文件內(nèi)聲明的全局變量或函數(shù)時,需要在本文件內(nèi)用extern再說明一下,告訴編譯系統(tǒng)到其他文件中尋找變量的原型聲明外部變量時,不許加類型聲明外部函數(shù)時,需要原型聲明舉例://A2.cpp#include<stdio.h>intx=200;voidgg(){printf("Iama2.file\n");}//A1.cpp#include<stdio.h>externx;externvoidgg();intmain(){printf("%d\n",x); gg();}建立一個工程,加入A1.cpp,a2.cpp返回指針型數(shù)據(jù)函數(shù)舉例#include<stdio.h>int*max(int*p,int*q){ if(*p>*q)returnp; elsereturnq;}main(){ inta=2,b=3,*m; m=max(&a,&b); printf("%d\n",*m);}//錯誤引用示例#include<stdio.h>int*f(){//把a改為靜態(tài)再試,沒錯,仍非法

inta=1; printf("A:%d\n",a);return&a;}intmain(){ int*p; p=f(); printf("B:%d\n",*p); *p+=2; printf("C:%d\n",*p);}函數(shù)指針(選學(xué))函數(shù)名和數(shù)組名相類似,函數(shù)名中保存著函數(shù)代碼的起始地址,因此也可以用一個變量把這個地址保存起來,這就是函數(shù)指針對比:整形指針---指向整數(shù)的指針函數(shù)指針---指向函數(shù)的指針區(qū)別int*swap();//一個具體的函數(shù),返回值為整形指針,int(*swap);//函數(shù)指針,沒有自己的函數(shù)體函數(shù)指針舉例#include<stdio.h>add(inta,intb){returna+b;}dec(inta,intb){returna-b;}//int(*ad)();intmain(){int(*ad)(int,int);ad=add;printf("%d\n",(*ad)(3,2));}用指針傳遞函數(shù)名#include<stdio.h>intadd(inta,intb){return(a+b);}intdec(inta,intb){return(a-b);}intrun(inta,intb,int(*op)(int,int)){intc;c=(*op)(a,b);returnc;}intmain(){intt;t=run(2,3,add);printf("%d\n",t);}函數(shù)指針數(shù)組#include<stdio.h>intf0(){return0;}intf1(){return1;}intf2(){return2;}intmain(){ int(*fpa[3])()={f0,f1,f2},i;fpa[0]=f0; for(i=0;i<3;i++)printf("%d\n",(*fpa[i])());}指針數(shù)組參數(shù)傳遞#include<stdio.h>voidf(intct,char**p){ inti; for(i=0;i<ct;i++)puts(p[i]);}intmain(){ char*s[3]={"aaa","bbbb","cccc"}; f(3,s);}主函數(shù)參數(shù)主函數(shù)的形參類型和個數(shù)是固定的,第一個參數(shù)是整數(shù),內(nèi)存實參的個數(shù),第二個參數(shù)是字符指針數(shù)組,或字符指針的指針,內(nèi)存全部實參字符串的首地址如:main(intargc,char**argv)main(intargc,char*argv[])實參是通過在命令行執(zhí)行時,后跟參數(shù)值實現(xiàn)的例如:程序名為prog形參:intmain(intargc,char*argv[])調(diào)用:progaaabbbccc主函數(shù)參數(shù)舉例intmain(intargc,char*argv[])argc為參數(shù)+1例:#include<stdio.h>intmain(intargc,char*argv[]){inti;printf("%d\n",argc);

溫馨提示

  • 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)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論