ในการใช้ sizeof() เราสามารถรับค่าโดยใช้ตัวแปร x โดยใช้ &x มันจะพิมพ์ที่อยู่ของมัน ตอนนี้หากเราเพิ่มค่าของ &x ก็อาจเพิ่มขึ้นในลักษณะที่แตกต่างกัน หากเพิ่มเพียงหนึ่งไบต์ แสดงว่าเป็นอักขระ หากค่าที่เพิ่มขึ้นคือ 4 แสดงว่าเป็น int หรือ float เป็นต้น โดยหาผลต่างระหว่าง &x + 1 กับ &x เราจะได้ขนาดของ x
ที่นี่เราจะใช้มาโครเนื่องจากไม่ได้กำหนดประเภทข้อมูลในฟังก์ชัน และอีกอย่างหนึ่ง เรากำลังแคสต์โดยใช้ (char*) ดังนั้น มันจะบอกเราว่าสามารถใส่ข้อมูลประเภทอักขระได้จำนวนเท่าใดในที่นั้น เนื่องจากอักขระใช้ข้อมูลหนึ่งไบต์
ตัวอย่าง
#include <stdio.h> #define my_sizeof(type) (char *)(&type+1)-(char*)(&type) 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)); }
ผลลัพธ์
size of x: 4 size of y: 1 size of z: 8