Kích thước con trỏ void* phụ thuộc kiến trúc hệ thống:
- 16-bit: 2 bytes
- 32-bit: 4 bytes
- 64-bit: 8 bytes
Tương tự mọi con trỏ dữ liệu (data pointer) trên cùng kiến trúc đều cùng kích thước.
Ví dụ
#include <stdio.h>
int main() {
void *ptr;
printf("Kich thuoc void*: %zu bytes\n", sizeof(ptr));
printf("Kich thuoc int*: %zu bytes\n", sizeof(int*));
printf("Kich thuoc char*: %zu bytes\n", sizeof(char*));
printf("Kich thuoc double*: %zu bytes\n", sizeof(double*));
return 0;
}
Kết quả (64-bit)
Kich thuoc void*: 8 bytes
Kich thuoc int*: 8 bytes
Kich thuoc char*: 8 bytes
Kich thuoc double*: 8 bytes
Giải thích: Trên hệ 64-bit, mọi con trỏ dữ liệu đều 8 bytes (64 bit địa chỉ). void* là con trỏ chung (generic pointer) có thể ép sang bất kỳ con trỏ dữ liệu nào.
Lưu ý:
- Con trỏ hàm (function pointer) có thể khác kích thước (ví dụ: Harvard architecture).
sizeof(void*)dùng để xác định kiến trúc: 4=32-bit, 8=64-bit.- In kích thước con trỏ dùng
%zu(cho size_t) hoặc%pcho địa chỉ.