欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

一、關(guān)于goto

  • 高手潛規(guī)則:禁用 goto
  • 項目經(jīng)驗:程序質(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é)果:

這段代碼中當 func 的入口參數(shù) n 的值小于 0 時,就會 goto 到STATUS 那里去執(zhí)行代碼,但是由于跳過了分配內(nèi)存環(huán)節(jié),就不能把 n 的值賦給 p[0],強行賦值就會發(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 的標尺
  • 無法在內(nèi)存中裁剪出 void 對應(yīng)的變量

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

小貼士

  • ANSI C:標準 C 語言的規(guī)范
  • 擴展C:在 ANSI C 的基礎(chǔ)上進行了擴充

上面的代碼在 ASNI C編譯器中無法通過編譯,但是對于支持 GNU 標準的 gcc 編譯器而言是合法的。

void 指針的意義

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

下面看一段通過 void* 實現(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語言詳細分析講解關(guān)鍵字goto與void的作用的文章就介紹到這了,更多相關(guān)C語言goto與void內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++中關(guān)于多態(tài)實現(xiàn)和使用方法

    C++中關(guān)于多態(tài)實現(xiàn)和使用方法

    這篇文章主要介紹了C++中關(guān)于多態(tài)實現(xiàn)和使用方法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • C語言實現(xiàn)輸入兩個數(shù)字將其按從小到大輸出的方法

    C語言實現(xiàn)輸入兩個數(shù)字將其按從小到大輸出的方法

    這篇文章主要介紹了C語言實現(xiàn)輸入兩個數(shù)字將其按從小到大輸出的方法,本文通過代碼講解的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-04-04
  • Windows注冊表中修改UAC(用戶賬號控制)及批處理腳本

    Windows注冊表中修改UAC(用戶賬號控制)及批處理腳本

    今天小編就為大家分享一篇關(guān)于Windows注冊表中修改UAC(用戶賬號控制)及批處理腳本,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • 淺談C++11中=delete的巧妙用法

    淺談C++11中=delete的巧妙用法

    本文主要介紹了C++11中=delete的巧妙用法,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • C++ vector操作實現(xiàn)

    C++ vector操作實現(xiàn)

    這篇文章主要介紹了C++ vector操作實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-12-12
  • C++實現(xiàn)高校人員信息管理系統(tǒng)

    C++實現(xiàn)高校人員信息管理系統(tǒng)

    這篇文章主要為大家詳細介紹了C++實現(xiàn)高校人員信息管理系統(tǒng)項,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • C++調(diào)試追蹤class成員變量的方法

    C++調(diào)試追蹤class成員變量的方法

    本文所講的是不通過修改一個class的成員,就能夠追蹤其成員。方法就是類似C語言中的函數(shù)指針
    2013-11-11
  • C++實現(xiàn)KDTree 附完整代碼

    C++實現(xiàn)KDTree 附完整代碼

    這篇文章主要介紹了C++實現(xiàn)KDTree的代碼詳解,包括kdTree概念介紹及分割的作用,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-07-07
  • C++中多才多藝的 const

    C++中多才多藝的 const

    在C++中,關(guān)鍵字const可以用來修飾任何作用域內(nèi)的變量、函數(shù)參數(shù)、函數(shù)本體、函數(shù)返回值、成員函數(shù)、迭代器,也可以用來修飾指針本身和指針目標,可謂多才多藝,我們要詳細了解其內(nèi)部細節(jié),以及邏輯奧秘,讓這把多功能瑞士軍刀盡情發(fā)揮其作用,需要的朋友可以參考一下
    2021-09-09
  • 從頭學習C語言之if語句的使用

    從頭學習C語言之if語句的使用

    這篇文章主要為大家詳細介紹了C語言之if語句的使用,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01

最新評論