C में sizeof() ऑपरेटर का उपयोग करके किसी वेरिएबल का आकार जानने के लिए, हम उसका एड्रेस लेते हैं और फिर उसमें 1 जोड़कर अंतर निकालते हैं। यह तकनीक पॉइंटर अंकगणित पर आधारित है।
कार्यप्रणाली
जब हम किसी वेरिएबल x का एड्रेस &x लेते हैं और फिर &x + 1 करते हैं, तो कंपाइलर स्वचालित रूप से उस वेरिएबल के डेटा टाइप के आकार के अनुसार एड्रेस को बढ़ा देता है। यदि हम (char*) से कास्ट करते हैं, तो प्रत्येक बाइट को अलग-अलग गिना जाता है। इस प्रकार, (char*)(&x + 1) - (char*)(&x) हमें x का आकार बाइट्स में देता है।
उदाहरण
#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: %zu\n", my_sizeof(x));
printf("size of y: %zu\n", my_sizeof(y));
printf("size of z: %zu\n", my_sizeof(z));
return 0;
}
आउटपुट
size of x: 4 size of y: 1 size of z: 8
महत्वपूर्ण बिंदु
- यह मैक्रो किसी भी डेटा टाइप के साथ काम करता है क्योंकि यह टाइप-इंडिपेंडेंट है।
(char*)कास्टिंग सुनिश्चित करती है कि पॉइंटर अंकगणित बाइट-स्तर पर हो।%zuफॉर्मेट स्पेसिफायरsize_tटाइप के लिए सही है।