一、認識void
在C語言中,void是一個關鍵字,表示無類型,空類型。
二、為什么需要void類型
描述一段還沒有具體使用的內存就需要使用void類型。
三、void使用
1. void不能去定義變量。例如:
void a = 10;
printf("a=%d\n",a);
//上述定義變量a為void類型 是錯誤的。編譯的時候編譯器是不會通過。
2. 為什么void不能定義變量?
1)定義變量的本質是在內存上開辟一段空間使用。那如果要使用這段空間,就必須得有數據類型。
2)數據類型的本質決定了變量的內存占用數和內存的解析方法。所以在定義變量的時候就必須有確定的數據類型。
3)如果沒有一個變量沒有確定的類型。那么編譯器就無法解析這個變量對應的內存。比如說void a ; 就是錯誤的
1.用于函數的返回值類型
當定義一個函數,如果函數不想要返回值,則可以使用void。例如在C語言中:
void Sum(int a , int b){
printf("%d\n",a+b);
}//這個函數就是沒有返回值 函數前的返回值類型為 void 表示空
int Sub (int a, int b){
return a-b;//這個函數就是有返回值,函數前的返回值類型是int。返回的是一個int型數據
}
2.用于函數的形參列表
當定義一個函數,這個函數不需要傳參數,就是形參列表沒有時。可以用void占位,也可不寫。例如:
voidShow( void){
printf("hello world");
}//無參數是寫void更嚴謹
//或者是不寫
voidShow( ){
printf("hello world");
}
3.用于指針表示空類型 void*
舉個例子:在C語言中需要手動申請空間使用malloc函數。
這是malloc函數原型:void *malloc(size_t size);
malloc()函數分配大小字節,并返回一個指向已分配內存的指針。內存未初始化。如果大小為0,那么malloc()返回NULL,
malloc函數向系統堆管理器申請一段內存給當前程序使用,malloc返回的是一個指針,這個指針指向申請的那段內存空間。這個時候,申請成功的內存空間還沒有存儲數據。同時malloc函數也不能預知將來會放什么類型的數據在這段申請成功的內存空間。不知道什么數據什么類型,就無法返回具體類型的指針。因此就需要用void*,告訴外部申請到了一段未確定類型的干凈內存。當然要使用這段內存就會存儲數據。存儲數據就會確定數據類型。所以最終void*類型會被強制轉換成確定的類型
舉個例子:有一個結構體,需要手動申請這個結構體空間
typedef struct Student{
int ID;
char name[10];
int score;
}Stu;
int main(){
Stu* zhangsan = (Stu*)malloc(sizeof(Stu)); //將malloc申請的內存空間void*強制轉換為Stu*類型
}