void 0 的含義和void的一些細節

2021-08-28 19:21:21 字數 932 閱讀 1991

一、在c語言中,0是乙個特殊的值,它可以表示:整型數值0,空字元,邏輯假(false)。表示的東西多了,有時候不好判斷。尤其是空字元和數字0之間。

為了明確的指出,0是空字元的含義,用用到了: ((void *) 0) 這個表示式。表示把0強制轉換為空字元,不管以前代表的什麼含義。

在c的標準標頭檔案中,就是這樣定義null的:

#define null     ((void *) 0)
關於void在指標的應用:

void表示「無型別」,void *表示無型別指標。在定義指標的時候,必須宣告指標的型別,因為型別決定了指標移動的位元組數。

例題:

double d=3.14;

double *dptr=&d;

int *iptr=dptr; //錯誤,double和int占用不同的位元組,編譯報錯。

double d=3.14;

double *dptr=&d;

void *vptr=dptr //正確,無型別指標可以接受任何型別的指標。

二、那麼這種「無型別的指標」能進行取值操作嗎?可以,但是要注意:

下面的做法是正確的:

#include int main(int argc, char *argv)

*((double*)vptr)的含義是:把vptr強制轉換為double型別指標,再用*號取值。

因為:*為單目運算子,優先順序由右至左,所以去掉外層括號也是可以的。*((double *)vptr) 等價  *(double *)vptr

三、不能把「無型別指標」賦給「有型別指標」,比如:可以說,「男人女人都是人」,但不能說,「人是男人」或者「人是女人」。看例題:

void *vptr;

double *dptr

dptr=vptr //錯誤,不能把無符號指標賦給有符號指標

C語言中的 void 0 與 void 0

前幾天看到乙個巨集,它大概是這樣的 define assert param expr expr void 0 assert failed u8 file line 的含意簡單,關鍵是那個 void 0 的用法,我還是第一次見到 我用 void 的時候,有兩種情況 1.放到函式前面,強調函式沒有返回值...

C語言中的 void 0 與 void 0

前幾天看到乙個巨集,它大概是這樣的 define assert param expr expr void 0 assert failed u8 file line 的含意簡單,關鍵是那個 void 0 的用法,我還是第一次見到 別笑 我用 void 的時候,有兩種情況 1.放到函式前面,強調函式沒有...

函式指標 void 0

在很多情況下,尤其是讀別人所寫 的時候,對 c語言宣告的理解能力變得非常重要,而c語言本身的凝練簡約也使得c語言的宣告常常會令人感到非常困惑,因此,在這裡我用一篇的內容來集中闡述一下這個問題。問題 宣告與函式 有一段程式儲存在起始位址為 0的一段記憶體上,如果我們想要呼叫這段程式,請問該如何去做?答...