Để sử dụng sizeof(), ta có thể lấy giá trị thông qua một biến x, dùng &x để in địa chỉ của nó. Nếu tăng giá trị của &x thì nó sẽ tăng theo các cách khác nhau. Nếu chỉ tăng 1 byte, nghĩa là kiểu ký tự; nếu tăng 4, thì là int hoặc float, v.v. Do đó, bằng cách lấy hiệu giữa &x + 1 và &x, ta có thể xác định kích thước của x.
Ở đây ta dùng macro vì kiểu dữ liệu không được định nghĩa trong hàm. Thêm vào đó, ta ép kiểu bằng (char*) để biết bao nhiêu dữ liệu kiểu ký tự có thể đặt ở vị trí đó, vì ký tự chiếm 1 byte.
Ví dụ
#include <stdio.h>
#define my_sizeof(type) (char *)(&type+1)-(char*)(&type)
int main(void) {
int x = 10;
char y = 'f';
double z = 254748.23;
printf("size of x: %d\n", my_sizeof(x));
printf("size of y: %d\n", my_sizeof(y));
printf("size of z: %d\n", my_sizeof(z));
return 0;
}
Kết quả
size of x: 4 size of y: 1 size of z: 8