一、在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的一段記憶體上,如果我們想要呼叫這段程式,請問該如何去做?答...