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