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

正文內(nèi)容

c語言程序設(shè)計(jì)教程(三)ppt-資料下載頁

2024-10-16 16:02本頁面
  

【正文】 c1=**cp。 ? 利用指針的指針可以允許被調(diào)用函數(shù)修改局部指針變量和處理指針數(shù)組。 多級指針 (續(xù) ) ? 例 820 多級指針的應(yīng)用。 ? include ? void FindCredit(int **Point)。 ? void main() ? { ? int vals[]={7,6,5,4,3,2,1,0}。 ? int *fp=vals。 ? FindCredit(amp。fp)。 ? printf(%d\n,*fp)。 ? } 多級指針 (續(xù) ) ? void FindCredit(int ** Point) ? { ? while(**Point!=0) ? if(**Point0) ? break。 ? else ? (*Point)++。 ? } ? 運(yùn)算結(jié)果: ? 4 多級指針 (續(xù) ) ? 現(xiàn)在讓我們來對例 820進(jìn)行分析。首先用一個(gè)數(shù)組的地址初始化指針 fp,然后把該指針的地址作為實(shí)參傳遞給函數(shù)FindCredit()。 FindCredit()函數(shù)通過表達(dá)式 **Point間接地得到數(shù)組中的數(shù)據(jù)。為遍歷數(shù)組以找到一個(gè)負(fù)值, FindCredit()函數(shù)進(jìn)行自增運(yùn)算的對象是調(diào)用者的指向數(shù)組的指針,而不是它自己的指向調(diào)用者指針的指針。語句 (*Point)++就是對形參指針指向的指針進(jìn)行自增運(yùn)算的。 多級指針 (續(xù) ) ? 例 821 輸出指針數(shù)組指向的各個(gè)字符串。 ? include ? void main() ? { ? char *chName_ptr[]={ ? WINDOWS, ? MSDOS, ? UNIX, ? LINUX}。 ? char **ptr。 ? for(int i=0。i4。i++) ? { ? ptr=chName_ptr+i。 ? printf(%s\n,*ptr)。 ? } ? } 多級指針 (續(xù) ) ? 運(yùn)行結(jié)果: ? WINDOWS ? MSDOS ? UNIX ? LINUX ? 注意:一級指針(直接存放數(shù)據(jù)變量的地址的指針)實(shí)現(xiàn)的是間接訪問,又稱 “ 單級間接尋址 ” ,簡稱“ 單級間址 ” 。二級指針則是間接的間接的訪問,稱為 “ 二級間址 ” 。從理論上講,間址方法可延伸到更多級。但三級及以上的指針極少用于程序,因?yàn)榧墧?shù)越多,越難理解,也容易出錯(cuò)。 void指針類型 ? void的字面意思是 “ 無類型 ” , void *則為 “ 無類型指針 ” , void *可以指向任何類型的數(shù)據(jù)。 void的含義 ? void真正的意義在于: ? ( 1) 對函數(shù)返回的限定; ? ( 2) 對函數(shù)參數(shù)的限定。 ? 眾所周知,如果指針 p1和 p2的類型相同,那么我們可以直接在 p1和 p2間互相賦值;如果 p1和 p2指向不同的數(shù)據(jù)類型,則必須使用強(qiáng)制類型轉(zhuǎn)換運(yùn)算符把賦值運(yùn)算符右邊的指針類型轉(zhuǎn)換為左邊指針的類型。 ? 例如: ? float *p1。 ? int *p2。 ? p1=p2。 void的含義 (續(xù) ) ? 其中 p1=p2語句會(huì)編譯出錯(cuò),必須改為: ? p1=(float *)p2。 ? 而 void *則不同,任何類型的指針都可以直接賦值給它,無需進(jìn)行強(qiáng)制類型轉(zhuǎn)換: ? void *p1。 ? int *p2。 ? p1=p2。 ? 但這并不意味著, void *也可以無需強(qiáng)制類型轉(zhuǎn)換地賦給其它類型的指針。因?yàn)?“ 無類型 ” 可以包容 “ 有類型 ” ,而 “ 有類型 ” 則不能包容 “ 無類型 ” 。 void使用規(guī)則 ? 下面給出 void關(guān)鍵字的使用規(guī)則: ? 如果函數(shù)沒有返回值,那么應(yīng)聲明為 void類型 ? 在 C語言中,凡不加返回值類型限定的函數(shù),就會(huì)被編譯器作為返回整型值處理。但是許多程序員卻誤以為其為 void類型。 ? 例 822 void類型示范。 ? include ? add(int a,int b) ? { ? return a+b。 ? } ? void main() ? { ? printf(2+3=%d\n,add(2,3))。 ? } void使用規(guī)則 (續(xù) ) ? 運(yùn)行結(jié)果: ? 2+3=5 ? 這說明不加返回值說明的函數(shù)的確為 int函數(shù)。 ? 另外,加上 void類型聲明后,也可以發(fā)揮代碼的 “ 自注釋 ” 作用。代碼的 “ 自注釋 ” 即代碼能自己注釋自己。 ? 如果函數(shù)無參數(shù),那么應(yīng)聲明其參數(shù)為 void ? 在 C語言中聲明一個(gè)這樣的函數(shù): ? int function(void) ? { ? return 1。 ? } ? 則進(jìn)行下面的調(diào)用是不合法的: ? function(2)。 void使用規(guī)則 (續(xù) ) ? 因?yàn)樵?C中,函數(shù)參數(shù)為 void的意思是這個(gè)函數(shù)不接受任何參數(shù),所以,在 C語言中,若函數(shù)不接受任何參數(shù),要指明參數(shù)為 void。 ? 小心使用 void指針類型 ? 按照 ANSI(American National Standards Institute)標(biāo)準(zhǔn),不能對void指針進(jìn)行算法操作,即下列操作都是不合法的: ? void *pvoid。 ? pvoid++。 /*ANSI:錯(cuò)誤 */ ? pvoid+=1。 /*ANSI:錯(cuò)誤 */ ? ANSI標(biāo)準(zhǔn)之所以這樣認(rèn)定,是因?yàn)樗鼒?jiān)持:進(jìn)行算法操作的指針必須是確定知道其指向數(shù)據(jù)類型大小的。 ? 例如: ? int *pint。 ? pint++。 /*ANSI:正確 */ ? pint++的結(jié)果是使其增大 sizeof(int),但是大名鼎鼎的GNU(GNU?s Not Unix的縮寫 )則不這么認(rèn)定,它指定 void *的算法操作與 char *一致。 void使用規(guī)則 (續(xù) ) ? 因此下列語句在 GNU編譯器中皆正確: ? pvoid++。 /*GNU:正確 */ ? pvoid+=1。 /*GNU:正確 */ ? pvoid++的執(zhí)行結(jié)果是其增大了 1。 ? 在實(shí)際的程序設(shè)計(jì)中,為迎合 ANSI標(biāo)準(zhǔn),并提高程序的可移植性,我們可以這樣編寫實(shí)現(xiàn)同樣功能的代碼: ? void * pvoid。 ? (char *)pvoid++。 /*ANSI:正確; GNU:正確 */ ? (char *)pvoid+=1。 /*ANSI:錯(cuò)誤; GNU:正確 */ ? GNU和 ANSI還有一些區(qū)別,總體而言, GNU較 ANSI更 “ 開放 ” ,提供了對更多語法的支持。但是我們在真實(shí)設(shè)計(jì)時(shí),還是應(yīng)該盡可能地迎合 ANSI標(biāo)準(zhǔn)。 ? 如果函數(shù)的參數(shù)可以是任意類型指針,那么應(yīng)聲明其參數(shù)為void * void使用規(guī)則 (續(xù) ) ? 典型的如內(nèi)存操作函數(shù) memcpy和 memset的函數(shù)原型分別為: ? void *memcpy(void *dest,const void *src,size_t len)。 ? void *memset(void *buffer,int c,size_t num)。 ? 這樣,任何類型的指針都可以傳入 memcpy和 memset中,這也真實(shí)地體現(xiàn)了內(nèi)存操作函數(shù)的意義,因?yàn)樗僮鞯膶ο髢H僅是一片內(nèi)存,而不論這片內(nèi)存是什么類型。 ? 下面的代碼執(zhí)行正確: ? 例如: memset接受任意類型指針 ? int intarray[100]。 ? memset(intarray,0,100*sizeof(int))。 /*將 intarray清 0*/ ? 例如: memcpy接受任意類型指針 ? int intarray1[100],intarray2[100]。 ? memcpy(intarray1,intarray2,100*sizeof(int))。 /*將 intarray2拷貝給 intarray1*/ void使用規(guī)則 (續(xù) ) ? 有趣的是, memcpy和 memset函數(shù)返回的也是 void *類型。 ? void不能代表一個(gè)真實(shí)的變量 ? 下面代碼都企圖讓 void代表一個(gè)真實(shí)的變量,因此都是錯(cuò)誤的代碼: ? void a。 /*錯(cuò)誤 */ ? function(void a)。 /*錯(cuò)誤 */ ? void的出現(xiàn)只是為了一種抽象的需要。 ? 例 823 void指針類型應(yīng)用實(shí)例。 ? include ? include void使用規(guī)則 (續(xù) ) ? void main() ? { ? void *ptr=NULL。 ? char chName[10]=Hello。 ? char *chptr。 ? chptr=chName。 ? printf(chptr=chName\n)。 ? printf(chName=%s\tchptr=%s\n,chName,chptr)。 ? printf(chName39。s address is %d\tchptr39。s address is %d\tptr39。s address is %d\n, ? amp。chName,amp。chptr,amp。ptr)。 ? printf(\n)。 ? ptr=chptr 。 ? printf(ptr=chptr\n)。 ? printf(ptr=%s\tchptr=%s\tchName=%s\n,ptr,chptr,chName)。 void使用規(guī)則 (續(xù) ) ? printf(chName39。s address is %d\tchptr39。s address is %d\tptr39。s address is %d\n, ? amp。chName,amp。chptr,amp。ptr)。 ? printf(\n)。 ? ptr=chName。 ? printf(ptr=chName\n)。 ? printf(ptr=%s\tchptr=%s\tchName=%s\n,ptr,chptr,chName)。 ? printf(chName39。s address is %d\tchptr39。s address is %d\tptr39。s address is %d\n, ? amp。chName,amp。chptr,amp。ptr)。 ? printf(\n) 。 ? } void使用規(guī)則 (續(xù) ) ? 運(yùn)行結(jié)果: ? chptr=chName ? chName=Hello chptr=Hello ? chName39。s address is 1310576 chptr39。s address is 1310572 ptr39。s address is ? 1310588 ? ptr=chptr ? ptr=Hello chptr=Hello chName=Hello ? chName39。s address is 1310576 chptr39。s address is 1310572 ptr39。s address is ? 1310588 ? ptr=chName ? ptr=Hello chptr=Hello chName=Hello ? chName39。s address is 1310576 chptr39。s address is 1310572 ptr39。s address is ? 1310588 帶參數(shù)的 main()函數(shù) ? 在操作系統(tǒng)狀態(tài)下執(zhí)行程序時(shí),必須鍵入該程序的可執(zhí)行文件名。例如,為了復(fù)制文件需鍵入一行字符: ? Copy ↙ ? 這行字符稱為命令行,其格式為: ? 命令名 參數(shù) 1 參數(shù) 2 …… 回車 ? 如上述命令中, copy是命令名,一般是可執(zhí)行程序的文件名, 、 ,命令名和各個(gè)參數(shù)之間以空格分隔,整個(gè)命令以回車結(jié)束。 ? 當(dāng)用 C語言編寫程序時(shí),有時(shí)要求在啟動(dòng)該程序的命令行中帶若干個(gè)參數(shù)。那么,如何將命令中的參數(shù)傳遞給 C程序呢? ? 請看下面的例子: 帶參數(shù)的 main()函數(shù) (續(xù) ) ? 例 824 帶命令行參數(shù)的驗(yàn)證示例。 ? include ? int main(int argc,char *argv[]) ? { ? int i。 ? printf(argc=%d\n,argc)。 ? printf(Command name: %s\n,argv[0])。 ? for(i=1。iargc。i++) ? printf(Argument No.%d: %s\n,i,argv[i])。 ? return 0。 ? }
點(diǎn)擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1