真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

C之goto和void(八)-創(chuàng)新互聯(lián)

    我們?cè)?C 語(yǔ)言中經(jīng)常會(huì)見(jiàn)到 void ,也會(huì)偶爾見(jiàn)到 goto。那么 C 語(yǔ)言中既然有 goto ,為什么我們?cè)诖a中見(jiàn)的很少呢?在以前很多的項(xiàng)目經(jīng)驗(yàn)中,我們得到這樣一條潛規(guī)則:一般項(xiàng)目都是禁用 goto 的,程序質(zhì)量與 goto 的出現(xiàn)次數(shù)成反比。自后也就造成了我們一般不會(huì)使用 goto 。

為陽(yáng)信等地區(qū)用戶(hù)提供了全套網(wǎng)頁(yè)設(shè)計(jì)制作服務(wù),及陽(yáng)信網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為成都網(wǎng)站設(shè)計(jì)、網(wǎng)站制作、陽(yáng)信網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專(zhuān)業(yè)、用心的態(tài)度為用戶(hù)提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶(hù)的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!

        我們來(lái)分析下面這個(gè)示例代碼,看看 goto 會(huì)帶來(lái)什么影響。

#include 
#include 

void func(int n)
{
    int* p = NULL;

    if(  n < 0 )
    {
        goto STATUS;
    }

    p = (int*)malloc(sizeof(int) * n);
    
STATUS:
    p[0] = n;    
    
    free(p);
}

int main()
{  
    printf("begin...\n");
    
    printf("func(1)\n");
    func(1);
    
    printf("func(-1)\n");
    func(-1);
    
    printf("end...\n");
    
    return 0;
}

        那么在 function(1) 中,函數(shù)會(huì)正常執(zhí)行退出。在 function(-1) 中,函數(shù)則會(huì)發(fā)生段錯(cuò)誤,為什么呢?因?yàn)?goto 改變了函數(shù)的執(zhí)行流。指針 p 沒(méi)有申請(qǐng)就要使用并釋放。我們來(lái)看看編譯的結(jié)果是否如我們所想?經(jīng)過(guò)編譯, 我們發(fā)現(xiàn)雖然函數(shù)能編譯過(guò),但是執(zhí)行的時(shí)候發(fā)生了段錯(cuò)誤。

C之 goto 和 void(八)


      下來(lái)我們來(lái)講講 void 。當(dāng)函數(shù)沒(méi)有返回值時(shí),應(yīng)將其聲明為 void;如果函數(shù)沒(méi)有參數(shù),應(yīng)將其參數(shù)聲明為 void ;void 修飾函數(shù)返回值和參數(shù)是為了表示“無(wú)”。那么在 C 語(yǔ)言中,到底有沒(méi)有定義 void 的內(nèi)存大小呢?在標(biāo)準(zhǔn)的 C 中是沒(méi)有定義它的大小的,但是在一些 C 的擴(kuò)展編譯器中定義了。比如在 gcc 編譯器中就定義 void 的大小為 1。我們可以在 gcc 編譯器中試下,結(jié)果如下所示:

C之 goto 和 void(八)

        那么對(duì)于 void 指針有什么意義呢?C 語(yǔ)言規(guī)定只有相同類(lèi)型的指針才能相互賦值,void* 指針作為左值用于“接收”任意類(lèi)型的指針,void* 指針作為右值使用時(shí)需要進(jìn)行強(qiáng)制類(lèi)型轉(zhuǎn)換。

        我們來(lái)通過(guò) void* 實(shí)現(xiàn) MemSet 函數(shù),具體代碼如下:

#include 

void MemSet(void* src, int length, unsigned char n)
{
    unsigned char* p = (unsigned char*)src;
    
    int i = 0;
    
    for(i=0; i

        我們可以看到因?yàn)?MemSet 函數(shù)的第一個(gè)參數(shù)為 void* ,所以數(shù)組 a 的類(lèi)型不管是 int、char、float還是 double,都不會(huì)報(bào)錯(cuò)。但是如果我們規(guī)定的是 int* 的話(huà),下面數(shù)組 a 的類(lèi)型為 double 的話(huà),就會(huì)報(bào)錯(cuò)。我們改成這樣試試,看編譯器是否會(huì)報(bào)錯(cuò)。效果如下:C之 goto 和 void(八)

        那么我們本次學(xué)習(xí)了 goto 和 void,通過(guò)本次學(xué)習(xí),總結(jié)如下:1、在現(xiàn)在的項(xiàng)目工程中一般是禁用 goto 語(yǔ)句的;2、void 是一種抽象的數(shù)據(jù)類(lèi)型;3、void 類(lèi)型不能用于定義變量、但可以用來(lái)聲明函數(shù)無(wú)參數(shù)、無(wú)返回值;4、可以定義 void* 類(lèi)型的指針;5、void* 類(lèi)型的指針可以接受任意類(lèi)型的指針值。后面我們會(huì)繼續(xù)對(duì) C 語(yǔ)言的學(xué)習(xí)。

         歡迎大家一起來(lái)學(xué)習(xí) C 語(yǔ)言,可以加我QQ:243343083。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線(xiàn),公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性?xún)r(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專(zhuān)為企業(yè)上云打造定制,能夠滿(mǎn)足用戶(hù)豐富、多元化的應(yīng)用場(chǎng)景需求。


新聞名稱(chēng):C之goto和void(八)-創(chuàng)新互聯(lián)
標(biāo)題來(lái)源:http://weahome.cn/article/pjsss.html

其他資訊

在線(xiàn)咨詢(xún)

微信咨詢(xún)

電話(huà)咨詢(xún)

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部