最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語言詳細(xì)分析講解關(guān)鍵字goto與void的作用

 更新時(shí)間:2022年04月20日 17:02:22   作者:清風(fēng)自在?流水潺潺  
我們在C語言中經(jīng)常會(huì)見到void,也會(huì)偶爾見到goto,那么C語言中既然有g(shù)oto,為什么我們在代碼中見的很少呢?在以前很多的項(xiàng)目經(jīng)驗(yàn)中,我們得到這樣一條潛規(guī)則:一般項(xiàng)目都是禁用goto的,程序質(zhì)量與goto的出現(xiàn)次數(shù)成反比。自后也就造成了我們一般不會(huì)使用goto

一、關(guān)于goto

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

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

#include <stdio.h>
#include <malloc.h>
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;
}

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

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

二、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* 那條語句可以編譯通過,因?yàn)?void* 指針是合法的。

小貼士

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

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

void 指針的意義

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

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

#include <stdio.h>
void MemSet(void* src, int length, unsigned char n)
{
    unsigned char* p = (unsigned char*)src;
    int i = 0;
    for(i=0; i<length; i++)
    {
        p[i] = n;
    }
}
int main()
{
    int a[5];
    int i = 0;
    MemSet(a, sizeof(a), 0);
    for(i=0; i<5; i++)
    {
        printf("%d\n", a[i]);
    }
    return 0;
}

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

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

三、小結(jié)

  • 現(xiàn)代軟件工程中禁用 goto 語句
  • void 是一種抽象的數(shù)據(jù)類型
  • void 類型不能用于定義變量
  • void 類型用于聲明函數(shù)無參數(shù)
  • void 類型用于聲明函數(shù)無返回值
  • 可以定義 void* 類型的指針
  • void* 類型的指針可以接受任意類型的指針值

到此這篇關(guān)于C語言詳細(xì)分析講解關(guān)鍵字goto與void的作用的文章就介紹到這了,更多相關(guān)C語言goto與void內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++中可正確獲取UTF-8字符長度的函數(shù)分享

    C++中可正確獲取UTF-8字符長度的函數(shù)分享

    這篇文章主要介紹了C++中可正確獲取UTF-8字符長度的函數(shù)分享,需要的朋友可以參考下
    2014-08-08
  • C語言利用UDP實(shí)現(xiàn)群聊聊天室的示例代碼

    C語言利用UDP實(shí)現(xiàn)群聊聊天室的示例代碼

    UDP是一個(gè)輕量級、不可靠、面向數(shù)據(jù)報(bào)的、無連接的傳輸層協(xié)議,多用于可靠性要求不嚴(yán)格,不是非常重要的傳輸,如直播、視頻會(huì)議等等。本文將利用UDP實(shí)現(xiàn)簡單的群聊聊天室,感興趣的可以了解一下
    2022-08-08
  • c語言函數(shù)棧幀的創(chuàng)建和銷毀過程詳解

    c語言函數(shù)棧幀的創(chuàng)建和銷毀過程詳解

    我們知道c語言中函數(shù)都是被調(diào)用的,main函數(shù)里面能調(diào)用其他函數(shù),其實(shí)main函數(shù)也是被別的函數(shù)調(diào)用的,下面通過本文給大家分享c語言函數(shù)棧幀的創(chuàng)建和銷毀過程,一起看看吧
    2021-08-08
  • C++淺析序列數(shù)據(jù)封裝與優(yōu)化實(shí)現(xiàn)方法

    C++淺析序列數(shù)據(jù)封裝與優(yōu)化實(shí)現(xiàn)方法

    封裝是面向?qū)ο缶幊讨械陌褦?shù)據(jù)和操作數(shù)據(jù)的函數(shù)綁定在一起的一個(gè)概念,這樣能避免受到外界的干擾和誤用,從而確保了安全,數(shù)據(jù)封裝是一種把數(shù)據(jù)和操作數(shù)據(jù)的函數(shù)捆綁在一起的機(jī)制,數(shù)據(jù)抽象是一種僅向用戶暴露接口而把具體的實(shí)現(xiàn)細(xì)節(jié)隱藏起來的機(jī)制
    2022-12-12
  • 關(guān)于C++中0是十進(jìn)制還是八進(jìn)制的問題

    關(guān)于C++中0是十進(jìn)制還是八進(jìn)制的問題

    本篇文章中,小編將為大家介紹關(guān)于C++中0是十進(jìn)制還是八進(jìn)制的問題,有需要的朋友可以參考一下
    2013-04-04
  • C++ map詳解

    C++ map詳解

    下面小編就為大家?guī)硪黄獪\談c++中的map。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2021-10-10
  • C++解決大數(shù)組棧內(nèi)存不夠問題的方法分析

    C++解決大數(shù)組棧內(nèi)存不夠問題的方法分析

    這篇文章主要介紹了C++解決大數(shù)組棧內(nèi)存不夠問題的方法,結(jié)合實(shí)例形式對比分析了C++針對大數(shù)組棧內(nèi)存不足情況的常見解決方法及其優(yōu)缺點(diǎn),具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2018-05-05
  • C語言 strftime 格式化顯示日期時(shí)間的實(shí)現(xiàn)

    C語言 strftime 格式化顯示日期時(shí)間的實(shí)現(xiàn)

    下面小編就為大家?guī)硪黄狢語言 strftime 格式化顯示日期時(shí)間的實(shí)現(xiàn)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-12-12
  • 深入講解C++中的構(gòu)造函數(shù)

    深入講解C++中的構(gòu)造函數(shù)

    這篇文章主要介紹了C++中的構(gòu)造函數(shù),是C++入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-09-09
  • C++STL函數(shù)和排序算法的快排以及歸并排序詳解

    C++STL函數(shù)和排序算法的快排以及歸并排序詳解

    這篇文章主要為大家詳細(xì)介紹了C++STL函數(shù)和排序算法的快排以及歸并排序,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03

最新評論

嘉荫县| 读书| 湄潭县| 牡丹江市| 仙游县| 阜阳市| 手游| 筠连县| 广昌县| 阳西县| 图们市| 高淳县| 澄江县| 青岛市| 托克逊县| 沙湾县| 谷城县| 房产| 遵义县| 杭锦后旗| 荔浦县| 霍州市| 广昌县| 韩城市| 承德县| 治县。| 平安县| 峡江县| 黔西县| 古浪县| 鄂尔多斯市| 潢川县| 新疆| 福鼎市| 湖南省| 南岸区| 米泉市| 达孜县| 清镇市| 资阳市| 洪湖市|