C語言詳細(xì)分析講解關(guān)鍵字goto與void的作用_第1頁
C語言詳細(xì)分析講解關(guān)鍵字goto與void的作用_第2頁
C語言詳細(xì)分析講解關(guān)鍵字goto與void的作用_第3頁
C語言詳細(xì)分析講解關(guān)鍵字goto與void的作用_第4頁
全文預(yù)覽已結(jié)束

下載本文檔

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

文檔簡介

第C語言詳細(xì)分析講解關(guān)鍵字goto與void的作用目錄一、關(guān)于goto二、void的意義三、小結(jié)

一、關(guān)于goto

高手潛規(guī)則:禁用goto項目經(jīng)驗:程序質(zhì)量與goto的出現(xiàn)次數(shù)成反比最后的判決:將goto打入冷宮

下面看一段goto副作用分析的代碼:

#includestdio.h

#includemalloc.h

voidfunc(intn)

int*p=NULL;

if(n0)

gotoSTATUS;

p=(int*)malloc(sizeof(int)*n);

STATUS:

p[0]=n;

free(p);

intmain()

printf("begin...\n");

printf("func(1)\n");

func(1);

printf("func(-1)\n");

func(-1);

printf("end...\n");

return0;

}

下面為輸出結(jié)果:

這段代碼中當(dāng)func的入口參數(shù)n的值小于0時,就會goto到STATUS那里去執(zhí)行代碼,但是由于跳過了分配內(nèi)存環(huán)節(jié),就不能把n的值賦給p[0],強(qiáng)行賦值就會發(fā)成段錯誤。

二、void的意義

void修飾函數(shù)返回值和參數(shù)

如果函數(shù)沒有返回值,那么應(yīng)該將其聲明為void如果函數(shù)沒有參數(shù),應(yīng)該聲明其參數(shù)為void

void修飾函數(shù)返回值和參數(shù)是為了表示無

下面這段代碼就表示f函數(shù)的輸入?yún)?shù)沒有限制。

不存在void變量

C語言沒有定義void究竟是多大內(nèi)存的別名沒有void的標(biāo)尺無法在內(nèi)存中裁剪出void對應(yīng)的變量

在下面的代碼中,只有void*那條語句可以編譯通過,因為void*指針是合法的。

小貼士

ANSIC:標(biāo)準(zhǔn)C語言的規(guī)范擴(kuò)展C:在ANSIC的基礎(chǔ)上進(jìn)行了擴(kuò)充

上面的代碼在ASNIC編譯器中無法通過編譯,但是對于支持GNU標(biāo)準(zhǔn)的gcc編譯器而言是合法的。

void指針的意義

C語言規(guī)定只有相同類型的指針才可以相互賦值void*指針作為左值用于接收任意類型的指針void*指針作為右值使用時需要進(jìn)行強(qiáng)制類型轉(zhuǎn)換

下面看一段通過void*實現(xiàn)MemSet函數(shù)的代碼:

#includestdio.h

voidMemSet(void*src,intlength,unsignedcharn)

unsignedchar*p=(unsignedchar*)src;

inti=0;

for(i=0;ilength;i++)

p[i]=n;

intmain()

inta[5];

inti=0;

MemSet(a,sizeof(a),0);

for(i=0;ii++)

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

return0;

}

下面為輸出結(jié)果:

void*定義的src表示可以接收任意類型的指針,所以數(shù)組a可以是任意類型。

三、小結(jié)

現(xiàn)代軟件工程中禁用goto語句void是一種抽象的數(shù)據(jù)類型void類型不能

溫馨提示

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

最新文檔

評論

0/150

提交評論