c程序設(shè)計(jì)(譚浩強(qiáng)版)第九講指針2_第1頁
c程序設(shè)計(jì)(譚浩強(qiáng)版)第九講指針2_第2頁
c程序設(shè)計(jì)(譚浩強(qiáng)版)第九講指針2_第3頁
c程序設(shè)計(jì)(譚浩強(qiáng)版)第九講指針2_第4頁
c程序設(shè)計(jì)(譚浩強(qiáng)版)第九講指針2_第5頁
已閱讀5頁,還剩32頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、2022-6-30 整型值整型值整型變量整型變量a整型變量地址整型變量地址一級指針變量一級指針變量pa一級指針變量地址一級指針變量地址二級指針變量二級指針變量ppa2022-6-3010a&apa&pappa2022-6-30運(yùn)行情況如下:X= 6.60= 6.60= 6.6022006.6 x28002200 p50002800 pp2022-6-302022-6-30 如果一個(gè)函數(shù)的返回值是指針,則稱此函數(shù)如果一個(gè)函數(shù)的返回值是指針,則稱此函數(shù)為為指針型函數(shù)指針型函數(shù)。 2022-6-30#include int *max ( int *i , int *j ) /* 定義

2、指針型函數(shù),其形參為兩個(gè)指針變量定義指針型函數(shù),其形參為兩個(gè)指針變量 */if ( *i*j ) return i; else return j;void main( )int a,b,*p; printf(Enter two integer numbers:);scanf(%d%d,&a,&b); p=max ( &a,&b ); /* 調(diào)用指針型函數(shù),返回調(diào)用指針型函數(shù),返回值為指針值為指針 */ printf(max=%dn,*p);運(yùn)行情況如下:Enter two integer numbers:12 2max=122022-6-30返回被調(diào)函數(shù)局部變返

3、回被調(diào)函數(shù)局部變量的指針,可能會出量的指針,可能會出現(xiàn)問題?,F(xiàn)問題。 2022-6-30 int (*pf)( ); /* 定義定義int型函數(shù)指針型函數(shù)指針pf */ int fun(int x ); /* 聲明聲明int型函數(shù)型函數(shù)fun( ) */ pf=fun; /* 給函數(shù)指針給函數(shù)指針pf賦值,使賦值,使pf指向指針型函數(shù)指向指針型函數(shù)fun( ) */2022-6-30 int (*pf)( ); /* 定義定義int型函數(shù)指針型函數(shù)指針pf */ int fun(int x ); /* 聲明聲明int型函數(shù)型函數(shù)fun( ) */ pf=fun; /* 給函數(shù)指針給函數(shù)指針pf

4、賦值,使賦值,使pf指向指針型函數(shù)指向指針型函數(shù)fun( ) */通過改變指針變量的內(nèi)容,一個(gè)指針變通過改變指針變量的內(nèi)容,一個(gè)指針變量可以先后指向同類型的不同函數(shù),實(shí)量可以先后指向同類型的不同函數(shù),實(shí)現(xiàn)對不同函數(shù)的調(diào)用?,F(xiàn)對不同函數(shù)的調(diào)用。在給函數(shù)指針賦值時(shí),只須給出函數(shù)名在給函數(shù)指針賦值時(shí),只須給出函數(shù)名而不必給出參數(shù)而不必給出參數(shù)2022-6-302022-6-30例如,若有函數(shù)例如,若有函數(shù)int f1(int x,int y) 和和int f2(char ch),則:則:int (*fs)( );fs=f1; /* fs指向函數(shù)指向函數(shù)f1( ) */x=(*fs)(a,b); /*

5、 相當(dāng)于相當(dāng)于x=f1(a,b); */fs=f2; /* 改變改變fs內(nèi)容,使內(nèi)容,使fs指向函數(shù)指向函數(shù)f2( ) */y=(*fs)(str); /* 相當(dāng)于相當(dāng)于y=f2(str); */函數(shù)指針變量中存有被調(diào)函數(shù)的首地址;函數(shù)指針變量中存有被調(diào)函數(shù)的首地址;調(diào)用時(shí)調(diào)用時(shí)“*函數(shù)指針變量名函數(shù)指針變量名”必須用圓括號括必須用圓括號括起來,表示對函數(shù)指針做間接存取運(yùn)算。起來,表示對函數(shù)指針做間接存取運(yùn)算。它它的作用等價(jià)于用函數(shù)名調(diào)用函數(shù)的作用等價(jià)于用函數(shù)名調(diào)用函數(shù),此外實(shí)參,此外實(shí)參表也應(yīng)與函數(shù)的形參表一一對應(yīng)。表也應(yīng)與函數(shù)的形參表一一對應(yīng)。2022-6-302022-6-30arr_a

6、dd(int arr ,int n ) int i,sum=0; for(i=0;in;i+) sum=sum+arri; return(sum);運(yùn)行情況如下:total1=144total2=1442022-6-302022-6-30void process(int *x,int n,int (*fun)( ) /* 形參形參fun為函數(shù)指針為函數(shù)指針 */ int result; result=(*fun)(x,n); /* 以函數(shù)指針以函數(shù)指針fun實(shí)現(xiàn)同類型相關(guān)函數(shù)的調(diào)用實(shí)現(xiàn)同類型相關(guān)函數(shù)的調(diào)用 */ printf(%dn,result); arr_max(int x ,int n)

7、 int max=x0,k; for(k=1;kn;k+) if (maxxk) max=xk; return (max); 2022-6-30arr_min(int x ,int n) int min=x0,k; for(k=1;kxk) min=xk; return (min); arr_sum(int x ,int n) int sum=0,k; for(k=0;kn;k+) sum+=xk; return (sum); void main( ) int aN= 10,25,33,15,27,choice; printf(Please input your choice:); scanf

8、 (%d,&choice);switch(choice)case 1: printf(max=); process (a,N,arr_max); break;/* 調(diào)用調(diào)用process ( )求求a數(shù)組中最大值,以函數(shù)名數(shù)組中最大值,以函數(shù)名arr_max為實(shí)參為實(shí)參 */ case 2: printf(min=); process (a,N,arr_min); break; /* 調(diào)用調(diào)用process ( )求求a數(shù)組中最小值,以函數(shù)名數(shù)組中最小值,以函數(shù)名arr_min為實(shí)參為實(shí)參 */ case 3:printf(sum=); process (a,N,arr_sum); b

9、reak; /* 調(diào)用調(diào)用process ( )求求a數(shù)組中元素值和,以函數(shù)名數(shù)組中元素值和,以函數(shù)名arr_sum為實(shí)參為實(shí)參 */ 2022-6-30運(yùn)行情況如下:Please input your choice:1max=33再次運(yùn)行:Please input your choice:2min=10再次運(yùn)行:Please input your choice:3sum=1102022-6-30main函數(shù)只能有兩個(gè)形參,并且這兩個(gè)形參的函數(shù)只能有兩個(gè)形參,并且這兩個(gè)形參的 類型也是固定的。第一個(gè)形參必須是整型變量,類型也是固定的。第一個(gè)形參必須是整型變量, 第二個(gè)形參可以定義為字符型指針數(shù)

10、組,也可以第二個(gè)形參可以定義為字符型指針數(shù)組,也可以 定義為二級字符指針變量,因此也可以寫成定義為二級字符指針變量,因此也可以寫成 main(int argc, char *argv)2022-6-302022-6-302022-6-30 #include void main(int argc, char *argv )if(argc=1)printf(“The content in argv0 is :%s”,argv0);if(argc=2)printf(“The command include %d parameter:”,argc-1);printf(“%s”,argv1);print

11、f(nThe content in argv0 is :%s,argv0);if(argc=3)printf(nThe command include %d parameter:,argc-1);printf(%s%s,argv1,argv2);if(argc3)printf(Bad command!);2022-6-30 注意注意: : 命令行參數(shù)所傳送的數(shù)據(jù)全部都是字符命令行參數(shù)所傳送的數(shù)據(jù)全部都是字符串。即便傳送的是數(shù)值,也是按字符串方式傳送串。即便傳送的是數(shù)值,也是按字符串方式傳送給主函數(shù)。程序中使用這些參數(shù)時(shí),還需要將數(shù)給主函數(shù)。程序中使用這些參數(shù)時(shí),還需要將數(shù)字字符串轉(zhuǎn)換成數(shù)值型數(shù)據(jù)。字字符串轉(zhuǎn)換成數(shù)值型數(shù)據(jù)。C語言標(biāo)準(zhǔn)庫函數(shù)語言標(biāo)準(zhǔn)庫函數(shù)提供了一些相關(guān)的數(shù)據(jù)類型轉(zhuǎn)換函數(shù)提供了一些相關(guān)的數(shù)據(jù)類型轉(zhuǎn)換函數(shù) 。運(yùn)行情況如下:C:cppVCDebug cprogThe content in argv0 is : cprog第二次運(yùn)行:C:cppVCDebug cprog oneThe command include1 parame

溫馨提示

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

評論

0/150

提交評論