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);