C語言 當void遇到 void

2021-10-23 04:37:07 字數 1014 閱讀 9978

void * 表示無/任意型別指標,大小為8b,任何型別指標均為8b;

舉個例子:

char *a = calloc(8,5);    //分配5個連續8位元組記憶體空間;

int *b = calloc(8,5);    //分配5個連續8位元組記憶體空間;

結果使用char型別接收,每個char占用乙個位元組,因為分配的空間總共有40位元組,所以char型別的a陣列可以存放50個字元,使用索引獲取值的時候,會根據char型別的大小逐個獲取記憶體中的值;

第二行中,分配了相同大小的記憶體空間,由於int型別占用4個位元組記憶體空間,所以相當於乙個大小為10的int陣列;

這種分配方法不夠簡潔,於是出現了char a[50]和int b[10]這種快速分配記憶體的方式;

注意:

c語言中支援陣列的越界訪問與賦值,但是並不能保證越界部分資料是安全的,當前程序中分配了40b的記憶體空間,在程式執行過程中,這40b的記憶體會由系統保證不會被其他程序占用,但是越界部分有可能會被其他程序修改。

為什麼說這些?

思考上述的calloc返回值為什麼可以使用兩種型別接受呢?(char指標和int指標)

calooc函式返回值為void*(無型別指標),實際上返回了乙個8b位址值,由於每個位址都是8b大小,所以返回值也就可以由任意型別指標接收;

注意上述free函式的引數中也使用了void*(無型別指標),表示函式外可以傳任意指標(記憶體位址)給函式,函式內部會進行對指標指向的記憶體進行操作;

思考:

void *(*start_routine)(void)* 表示什麼?

返回值為任意型別指標,引數為任意型別指標的函式指標;

幾種指標的區分(文末):

C語言 void和void 的區別

在c語言中void 常用於2個方面 對函式返回型別的限定和對函式引數限定。1 對函式返回型別的限定 當函式不需要返回型別是必須用void 來限定返回型別,限定了函式的返回型別為void後,函式不能有返回值。如 void fun int a 2 對函式引數型別的限定 當函式不允許接受引數時,必須用vo...

C語言中的void 和void 指標型別

c語言中的void 和void 指標型別 c語言,void,void指標 許多初學者對c中的void 和void 的指標型別不是很了解。因此常常在使用上出現一些錯誤,本文將告訴大家關於void 和void 指標型別的使用方法及技巧。首先,我們來說說void 的含義,void的字面意思是 無型別 vo...

C語言中的void 和void 指標型別

許多初學者對c中的void 和void 的指標型別不是很了解。因此常常在使用上出現一些錯誤,本文將告訴大家關於void 和void 指標型別的使用方法及技巧。首先,我們來說說void 的含義,void的字面意思是 無型別 void 則為 無型別指標 void 可以指向任何型別的 資料。void幾乎只...