void型別及void指標

2021-07-11 08:28:09 字數 1477 閱讀 4051

基於前面的一篇部落格模擬實現 memcpy 和

memmove 時用到的void* 指標展開關於 void 和 void* 指標的概述;

1.void 相信大家不會陌生,經常定義無返回值的函式是用 void 定義,表示函式無需返回值;

void fun(void)

2. void 的字面意思是 「無型別」,  void 可以定義變數 ,但是相信應該沒人會去這樣定義,因為沒有任何人意義,

並且大多數編譯器都會報錯。例:

3.這裡還有乙個誤區,有些時候程式設計師會沒有寫出函式的返回值型別,在c語言中,凡是沒有加返回值型別限制的

函式都會被編譯器作為返回整形值處理,大多數程式設計師可能會認為是 void 型;

fun(void)

.

在上面這段**裡,fun函式無引數,一般我們都會直接寫個 () 裡面什麼都不會寫,作為乙個良好的程式設計習慣,

一般函式無參,則預設為void;如果函式的引數可以是任意型別的指標,你那麼應該宣告為 void*;

這裡既可以引出我們接下來要講的  void*  指標!

(1)對函式返回的限定

(2)對函式引數的限定

1. 平時我們所熟知的指標型別都 int*  ,char*,而void*可以指向任何型別的資料,包括'\0';這就是實現

memcpy和memmove時使用void*的原因;void*就是「無型別的指標」;

2.   平時我們將指標 p1 賦值給 指標 p2 時需要判斷指標型別是否一致,否則將會出錯,如果不一致則需要強

制型別轉換;例:

.        

int *p1;

char *p2;

p1 = (int*)p2;

當然這樣的定義指標而不初始化是有問題的,只是為了舉例方便,大家自己寫的時候要注意野指標的問題;

而void*則可以隨意的接收任何型別的指標,但是其他型別的指標不能隨意接收void *的指標,這就是前面說到

的void*是個無型別的的指標,所以它所指向的內容型別是不確定的;

但是這並不意味其他型別的指標無法接受void * 指標,我們不是還有強制型別轉換嘛!

void* fun(void* p,void *q)

.           

「無型別可以包容有型別,而有型別不能包容無型別」,這是引用大牛總結的話,相信我舉的例子已經把這句話

詮釋了!

3.關於函式無返回值時定義為void 還需強調一下,其實c語言有很嚴格的型別檢查,不會允許函式不加型別聲

明的情況發生的, 但是編譯器並不是這麼嚴格!   所以函式無返回值時一定要加void 宣告;

void及void指標型別

1.概述 許多初學者對c c 語言中的void及void指標型別不甚理解,因此在使用上出現了一些錯誤。本文將對void關鍵字的深刻含義進行解說,並 詳述void及void指標型別的使用方法與技巧。2.void的含義 void的字面意思是 無型別 void 則為 無型別指標 void 可以指向任何型別...

void型別及void指標

許多初學者對c c 語言中的void及void指標型別不甚理解,因此在使用上出現了一些錯誤。本文將對void關鍵字的深刻含義進行解說,並 詳述void及void指標型別的使用方法與技巧。2.void的含義 void的字面意思是 無型別 void 則為 無型別指標 void 可以指向任何型別的資料。v...

void型別及void指標

1.概述 許多初學者對c c 語言中的void及void指標型別不甚理解,因此在使用上出現了一些錯誤。本文將對void關鍵字的深刻含義進行解說,並 詳述void及void指標型別的使用方法與技巧。2.void的含義 void的字面意思是 無型別 void 則為 無型別指標 void 可以指向任何型別...