void 指標作為引數並返回標準函式的值
Version > K&R
void*
是指向物件型別的指標的所有型別。使用它的一個例子是 malloc
函式,它被宣告為
void* malloc(size_t);
指向 void 的返回型別意味著可以將 malloc
的返回值賦給指向任何其他型別物件的指標:
int* vector = malloc(10 * sizeof *vector);
通常認為良好的做法是不將值顯式地轉換為 void 指標。在 malloc()
的特定情況下,這是因為使用顯式強制轉換,如果你忘記包含 stdlib.h
,編譯器可能會假設但不警告 malloc()
的錯誤返回型別。這也是使用 void 指標的正確行為來更好地符合 DRY(不要重複自己)原則的情況; 將上面的內容與下面的內容進行比較,其中以下程式碼包含幾個不必要的其他地方,其中拼寫錯誤可能導致問題:
int* vector = (int*)malloc(10 * sizeof int*);
同樣,功能如
void* memcpy(void *restrict target, void const *restrict source, size_t size);
將其引數指定為 void *
,因為任何物件的地址,無論型別如何,都可以傳入。此處,呼叫不應使用強制轉換
unsigned char buffer[sizeof(int)];
int b = 67;
memcpy(buffer, &b, sizeof buffer);