C語言 - void的用法解析

C語言 - void的用法解析

簡介

​ void 中文翻譯爲"無類型",有的也叫"空類型"。常用在程序中對定義函數的參數類型、返回值、函數中指針類型進行聲明。

用法

​ void應用最廣泛的就是跟指針結合,即

void *		//無類型指針,也稱爲空指針,可以指向任何類型的數據
 			//注意一點:當我們需要使用void 類型的的指針變量區指向				某一類型的變量的時候,必須要對其進行類型轉換

​ 這裏補充一點:因爲我們在定義一個指針變量的時候第一件事就是指定我們指針變量所指向的變量的類型。一旦被指定,我們的指針變量就只能指向這一類型的變量,即只能保存這一類變量的地址。之所以這樣呢,是跟我們計算機的存儲數據的形式有關,這裏就不展開啦。因爲我們這裏要討論的是void的用法。

​ 我們知道兩個指針變量p1,p2,只有當它們類型相同的時候才能進行互相賦值。如果p1,p2指向不同的數據類型,那麼他們必須進行類型轉換才能相互賦值。比如:

float *p1;
int *p2;
p1 = p2;

​ 執行上面一段程序的時候我們會發現會報錯,提示"cannot convert from ‘int*’ to ‘float*’",若改爲

int *p1;
void *p2;
p1 = p2;

此時就不會報錯,因爲賦值運算符的右邊進行了隱式類型轉換。

​ 當然啦,void並非只能跟指針變量結合使用,void也可以用來定義一個變量。但是這樣並沒有意義。並且當我們進行編譯的時候還會報錯"illegal use of type ‘void’"。

​ void另一個重要的應用則就是跟函數進行結合主要有以下兩個方面的應用。

  1. 對函數返回的限定;
  2. 對函數參數的限定;

總結

  1. 如果函數沒有返回值那麼應聲明爲void 類型

    C語言中有一個規則,凡是不加返回值限定的函數,就會被編譯器作爲整型值處理。但是許多人卻誤以爲其爲void類型。

    因爲C語言不想C++那樣有很嚴格的類型安全檢查。所以爲了避免混,對於任何函數必須制定其返回值類型。如果函數沒有返回值一定要聲明爲void類型。這樣既可避免混淆也方便自己和別人查看我們的代碼。

  2. 如果函數無參數,那麼應該聲明其參數爲void

    如果我們所寫的函數不接受任何參數,那麼一定要指明其參數爲void。

  3. 如果函數的參數可以是任意類型指針,那麼應聲明其參數爲void

    這裏有兩個很經典的內存處理函數,在驅動中應用很廣泛。

    void *memcpy(void *dest,const void *src,size_t len);
    void memset(void *buffer,int c , size_t num);
    

    可以看到我們用void 來修飾了函數參數類型,即我麼可以傳任意類型指針。這也體現內存操作函數的意義,因爲它操作的對象僅僅是一片內存,而不論這片內存存儲的數據是什麼類型。

  4. 使用void類型指針時應該注意

    按照C標準規定,我們不能對void型 指針進行算法。對有類型的指針進行算法操作的時候我們知道,因爲其有具體所指向的類型,所以其的算法是其所指向的數據類型爲單位進行的。而void爲空或者說無類型,所以就無法對其進行算法運算。

  5. void 不能代表一個真實的數據類型

    這個前面提到過,因爲void在C語言中解釋爲空,或者無類型,所以它當然無法代表一個真實的數據類型了。不過我們可以對其進行類型轉換,這樣它又可以變成各種各樣的數據類型,所以我們可以將其理解成一個"抽象數據類型"

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章