সি প্রোগ্রামিং ভাষায় sizeof() অপারেটরের কাজ বুঝতে এবং এটি কীভাবে কাজ করে তা জানতে চাইলে আমরা পয়েন্টার এরিথমেটিক ব্যবহার করে নিজস্ব একটি sizeof ফাংশন তৈরি করতে পারি।
কনসেপ্ট
যদি আমরা একটি ভেরিয়েবল x নিই, তবে &x দিয়ে তার ঠিকানা পাওয়া যায়। এখন যদি &x এর মান বেড়াই, তবে ডেটা টাইপ অনুযায়ী এটি ভিন্নভাবে বৃদ্ধি পাবে। যদি কেবল ১ বাইট বৃদ্ধি পায়, তবে এটি ক্যারেক্টার টাইপ, ৪ বাইট বৃদ্ধি পেলে এটি ইন্টিজার বা ফ্লোট টাইপ। সুতরাং (&x + 1) এবং &x এর পার্থক্য নিয়ে আমরা x এর আকার জানতে পারি।
এখানে আমরা ম্যাক্রো ব্যবহার করব কারণ ফাংশনে ডেটা টাইপ সংজ্ঞায়িত থাকে না। এছাড়া আমরা (char*) দিয়ে キャスト করব যাতে বোঝা যায় কতটি ক্যারেক্টার টাইপের ডেটা সেখানে রাখা সম্ভব, কারণ ক্যারেক্টার ১ বাইট মেমরি দখল করে।
উদাহরণ
#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;
}
আউটপুট
size of x: 4
size of y: 1
size of z: 8
ব্যাখ্যা
my_sizeof(x)ইন্টিজারের আকার ৪ বাইট দেখায়my_sizeof(y)ক্যারেক্টারের আকার ১ বাইট দেখায়my_sizeof(z)ডাবলের আকার ৮ বাইট দেখায়
দ্রষ্টব্য: এই পদ্ধতিটি কম্পাইলার-নির্ভর হতে পারে এবং স্ট্যান্ডার্ড sizeof অপারেটর ব্যবহার করা সেরা অনুশীলন।