freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

c語言指針教程word版(編輯修改稿)

2024-10-22 19:17 本頁面
 

【文章內(nèi)容簡介】 n b。}main(){int max(int a,int b)。int(*pmax)()。int x,y,z。pmax=max。printf(input two numbers:\n)。scanf(%d%d,amp。x,amp。y)。z=(*pmax)(x,y)。printf(maxmum=%d,z)。}  從上述程序可以看出用,函數(shù)指針變量形式調(diào)用函數(shù)的步驟如下:1. 先定義函數(shù)指針變量,如后一程序中第9行 int (*pmax)()。定義pmax為函數(shù)指針變量。2. 把被調(diào)函數(shù)的入口地址(函數(shù)名)賦予該函數(shù)指針變量,如程序中第11行 pmax=max。3. 用函數(shù)指針變量形式調(diào)用函數(shù),如程序第14行 z=(*pmax)(x,y)。 調(diào)用函數(shù)的一般形式為: (*指針變量名) (實參表)使用函數(shù)指針變量還應(yīng)注意以下兩點:a. 函數(shù)指針變量不能進行算術(shù)運算,這是與數(shù)組指針變量不同的。數(shù)組指針變量加減一個整數(shù)可使指針移動指向后面或前面的數(shù)組元素,而函數(shù)指針的移動是毫無意義的。b. 函數(shù)調(diào)用中(*指針變量名)的兩邊的括號不可少,其中的*不應(yīng)該理解為求值運算,在此處它只是一種表示符號。指針型函數(shù)前面我們介紹過,所謂函數(shù)類型是指函數(shù)返回值的類型。 在C語言中允許一個函數(shù)的返回值是一個指針(即地址), 這種返回指針值的函數(shù)稱為指針型函數(shù)。定義指針型函數(shù)的一般形式為: 類型說明符 *函數(shù)名(形參表) { …… /*函數(shù)體*/} 其中函數(shù)名之前加了“*”號表明這是一個指針型函數(shù),即返回值是一個指針。類型說明符表示了返回的指針值所指向的數(shù)據(jù)類型。如:int *ap(int x,int y){...... /*函數(shù)體*/}  表示ap是一個返回指針值的指針型函數(shù), 它返回的指針指向一個整型變量。下例中定義了一個指針型函數(shù) day_name,它的返回值指向一個字符串。該函數(shù)中定義了一個靜態(tài)指針數(shù)組name。name 數(shù)組初始化賦值為八個字符串,分別表示各個星期名及出錯提示。形參n表示與星期名所對應(yīng)的整數(shù)。在主函數(shù)中, 把輸入的整數(shù)i作為實參, 在printf語句中調(diào)用day_name函數(shù)并把i值傳送給形參 n。day_name函數(shù)中的return語句包含一個條件表達(dá)式, n 值若大于7或小于1則把name[0] 指針返回主函數(shù)輸出出錯提示字符串“Illegal day”。否則返回主函數(shù)輸出對應(yīng)的星期名。主函數(shù)中的第7行是個條件語句,其語義是,如輸入為負(fù)數(shù)(i0)則中止程序運行退出程序。exit是一個庫函數(shù),exit(1)表示發(fā)生錯誤后退出程序, exit(0)表示正常退出?! ?yīng)該特別注意的是函數(shù)指針變量和指針型函數(shù)這兩者在寫法和意義上的區(qū)別。如int(*p)()和int *p()是兩個完全不同的量。int(*p)()是一個變量說明,說明p 是一個指向函數(shù)入口的指針變量,該函數(shù)的返回值是整型量,(*p)的兩邊的括號不能少。int *p() 則不是變量說明而是函數(shù)說明,說明p是一個指針型函數(shù),其返回值是一個指向整型量的指針,*p兩邊沒有括號。作為函數(shù)說明, 在括號內(nèi)最好寫入形式參數(shù),這樣便于與變量說明區(qū)別。 對于指針型函數(shù)定義,int *p()只是函數(shù)頭部分,一般還應(yīng)該有函數(shù)體部分。main(){int i。char *day_name(int n)。 printf(input Day No:\n)。scanf(%d,amp。i)。if(i0) exit(1)。printf(Day No:%2d%s\n,i,day_name(i))。}char *day_name(int n){static char *name[]={ Illegal day,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday}。return((n1||n7) ? name[0] : name[n])。}  本程序是通過指針函數(shù),輸入一個1~7之間的整數(shù), 輸出對應(yīng)的星期名。指針數(shù)組的說明與使用一個數(shù)組的元素值為指針則是指針數(shù)組。 指針數(shù)組是一組有序的指針的集合。 指針數(shù)組的所有元素都必須是具有相同存儲類型和指向相同數(shù)據(jù)類型的指針變量?! ≈羔様?shù)組說明的一般形式為: 類型說明符*數(shù)組名[數(shù)組長度]   其中類型說明符為指針值所指向的變量的類型。例如: int *pa[3] 表示pa是一個指針數(shù)組,它有三個數(shù)組元素, 每個元素值都是一個指針,指向整型變量。通常可用一個指針數(shù)組來指向一個二維數(shù)組。 指針數(shù)組中的每個元素被賦予二維數(shù)組每一行的首地址, 因此也可理解為指向一個一維數(shù)組。圖6—6表示了這種關(guān)系。int a[3][3]={1,2,3,4,5,6,7,8,9}。int *pa[3]={a[0],a[1],a[2]}。int *p=a[0]。main(){int i。for(i=0。i3。i++)printf(%d,%d,%d\n,a[i][2i],*a[i],*(*(a+i)+i))。for(i=0。i3。i++)printf(%d,%d,%d\n,*pa[i],p[i],*(p+i))。}  本例程序中,pa是一個指針數(shù)組,三個元素分別指向二維數(shù)組a的各行。然后用循環(huán)語句輸出指定的數(shù)組元素。其中*a[i]表示i行0列元素值;*(*(a+i)+i)表示i行i列的元素值;*pa[i]表示i行0列元素值;由于p與a[0]相同,故p[i]表示0行i列的值;*(p+i)表示0行i列的值。讀者可仔細(xì)領(lǐng)會元素值的各種不同的表示方法。 應(yīng)該注意指針數(shù)組和二維數(shù)組指針變量的區(qū)別。 這兩者雖然都可用來表示二維數(shù)組,但是其表示方法和意義是不同的?! 《S數(shù)組指針變量是單個的變量,其一般形式中(*指針變量名)兩邊的括號不可少。而指針數(shù)組類型表示的是多個指針( 一組有序指針)在一般形式中*指針數(shù)組名兩邊不能有括號。例如: int (*p)[3]。表示一個指向二維數(shù)組的指針變量。該二維數(shù)組的列數(shù)為3或分解為一維數(shù)組的長度為3。 int *p[3] 表示p是一個指針數(shù)組,有三個下標(biāo)變量p[0],p[1],p[2]均為指針變量。  指針數(shù)組也常用來表示一組字符串, 這時指針數(shù)組的每個元素被賦予一個字符串的首地址。 指向字符串的指針數(shù)組的初始化更為簡單。 其初始化賦值為: char *name[]={Illagal day,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday}?! ⊥瓿蛇@個初始化賦值之后,name[0]即指向字符串Illegal day,name[1]指?quot。Monday......?! ≈羔様?shù)組也可以用作函數(shù)參數(shù)。在本例主函數(shù)中,定義了一個指針數(shù)組name,并對name 作了初始化賦值。其每個元素都指向一個字符串。然后又以name 作為實參調(diào)用指針型函數(shù)day name,在調(diào)用時把數(shù)組名 name 賦予形參變量name,輸入的整數(shù)i作為第二個實參賦予形參n。在day name函數(shù)中定義了兩個指針變量pp1和pp2,pp1被賦予name[0]的值(即*name),pp2被賦予name[n]的值即*(name+ n)。由條件表達(dá)式?jīng)Q定返回pp1或pp2指針給主函數(shù)中的指針變量ps。最后輸出i和ps的值。指針數(shù)組作指針型函數(shù)的參數(shù)main(){static char *name[]={ Illegal day,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday}。char *ps。int i。char *day name(char *name[],int n)。printf(input Day No:\n)。scanf(%d,amp。i)。if(i0) exit(1)。ps=day name(name,i)。printf(Day No:%2d%s\n,i,ps)。}char *day name(char *name[],int n){char *pp1,*pp2。pp1=*name。pp2=*(name+n)。return((n1||n7)? pp1:pp2)。} 下例要求輸入5個國名并按字母順序排列后輸出。在以前的例子中采用了普通的排序方法, 逐個比較之后交換字符串的位置。交換字符串的物理位置是通過字符串復(fù)制函數(shù)完成的。 反復(fù)的交換將使程序執(zhí)行的速度很慢,同時由于各字符串(國名) 的長度不同,又增加了存儲管理的負(fù)擔(dān)。 用指針數(shù)組能很好地解決這些問題。把所有的字符串存放在一個數(shù)組中, 把這些字符數(shù)組的首地址放在一個指針數(shù)組中,當(dāng)需要交換兩個字符串時, 只須交換指針數(shù)組相應(yīng)兩元素的內(nèi)容(地址)即可,而不必交換字符串本身。程序中定義了兩個函數(shù),一個名為sort完成排序, 其形參為指針數(shù)組name,即為待排序的各字符串?dāng)?shù)組的指針。形參n為字符串的個數(shù)。另一個函數(shù)名為print,用于排序后字符串的輸出,其形參與sort的形參相同。主函數(shù)main中,定義了指針數(shù)組name 并作了初始化賦值。然后分別調(diào)用sort函數(shù)和print函數(shù)完成排序和輸出。值得說明的是在sort函數(shù)中,對兩個字符串比較,采用了strcmp 函數(shù),strcmp函數(shù)允許參與比較的串以指針方式出現(xiàn)。name[k]和name[ j]均為指針,因此是合法的。字符串比較后需要交換時, 只交換指針數(shù)組元素的值,而不交換具體的字符串, 這樣將大大減少時間的開銷,提高了運行效率?,F(xiàn)編程如下:includemain(){void sort(char *name[],int n)。void print(char *name[],int n)。static char *name[]={ CHINA,AMERICA,AUSTRALIA,FRANCE,GERMAN}。int n=5。sort(name,n)。print(name,n)。}void sort(char *name[],int n){char *pt。int i,j,k。for(i=0。ik=i。for(j=i+1。jif(strcmp(name[k],name[j])0) k=j。if(k!=i){pt=name[i]。name[i]=name[k]。name[k]=pt。}}}void print(char *name[],int n){int i。for (i=0。i}main函數(shù)的參數(shù)  前面介紹的main函數(shù)都是不帶參數(shù)的。因此main 后的括號都是空括號。實際上,main函數(shù)可以帶參數(shù),這個參數(shù)可以認(rèn)為是 main函數(shù)的形式參數(shù)。C語言規(guī)定main函數(shù)的參數(shù)只能有兩個, 習(xí)慣上這兩個參數(shù)寫為argc和argv。因此,main函數(shù)的函數(shù)頭可寫為: main (argc,argv)C語言還規(guī)定argc(第一個形參)必須是整型變量,argv( 第二個形參)必須是指向字符串的指針數(shù)組。加上形參說明后,main函數(shù)的函數(shù)頭應(yīng)寫為: main (argc,argv)int argv。char *argv[]。或?qū)懗桑簃ain (int argc,char *argv[])  由于main函數(shù)不能被其它函數(shù)調(diào)用, 因此不可能在程序內(nèi)部取得實際值。那么,在何處把實參值賦予main函數(shù)的形參呢? 實際上,main函數(shù)的參數(shù)值是從操作系統(tǒng)命令行上獲得的。當(dāng)我們要運行一個可執(zhí)行文件時,在DOS提示符下鍵入文件名,再輸入實際參數(shù)即可把這些實參傳送到main的形參中去?! OS提示符下命令行的一般形式為: C:\可執(zhí)行文件名 參數(shù) 參數(shù)……。 但是應(yīng)該特別注意的是,main 的兩個形參和命令行中的參數(shù)在位置上不是一一對應(yīng)的。因為,main的形參只有二個,而命令行中的參數(shù)個數(shù)原則上未加限制。argc參數(shù)表示了命令行中參數(shù)的個數(shù)(注意:文件名本身也算一個參數(shù)),argc的值是在輸入命令行時由系統(tǒng)按實際參數(shù)的個數(shù)自動賦予的。例如有命令行為: C:\E6 24 BASIC dbase FORTRAN由于文件名E6 24本身也算一個參數(shù),所以共有4個參數(shù),因此argc取得的值為4。argv參數(shù)是字符串指針數(shù)組,其各元素值為命令行中各字符串(參數(shù)均按字符串處理)的首地址。 指針數(shù)組的長度即為參數(shù)個數(shù)。數(shù)組元素初值由系統(tǒng)自動賦予。:main(int argc,char *argv){while(argc1)printf(%s\n,*++argv)。},存放在A驅(qū)動器的盤內(nèi)。因此輸入的命令行為: C:\a:e24 BASIC dBASE FORTRAN 則運行結(jié)果為:BASICdBASEFORTRAN  該行共有4個參數(shù),執(zhí)行main時,argc的初值即為4。argv的4個元素分為4個字符串的首地址。執(zhí)行while語句,每循環(huán)一次 argv值減1,當(dāng)argv等于1時停止循環(huán),共循環(huán)三次, 因此共可輸出三個參數(shù)。在printf函數(shù)中,由于打印項*++argv是先加1再打印, 故第一次打印的是argv[1]所指的字符串BASIC。第二、 三次循環(huán)分別打印后二個字符串。而參數(shù)e24是文件名,不必輸出?! ∠吕拿钚兄杏袃蓚€參數(shù),第二個參數(shù)20即為輸入的n值。在程序中*++argv的值為字符串“20”,然后用函數(shù)atoi把它換為整型作為while語句中的循環(huán)控制變量,輸出20個偶數(shù)。includemain(int argc,char*argv[]){int a=0,n。n=ato
點擊復(fù)制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1