मैं सी भाषा में नया हूं और केवल structs और पॉइंटर्स के बारे में सीखा।ऑफ़सेट मैक्रो आवश्यक क्यों है?
मेरा प्रश्न हाल ही में देखा गया offsetof
मैक्रो से संबंधित है। मुझे पता है कि यह कैसे काम करता है और इसके पीछे तर्क।
<stddef.h>
फ़ाइल में इस प्रकार परिभाषा है:
#define offsetof(type,member) ((unsigned long) &(((type*)0)->member))
मेरे सवाल है, अगर मैं एक struct के रूप में नीचे देख सकते हैं:
struct test {
int field1:
int field2:
};
struct test var;
क्यों नहीं मैं सीधे field2
का पता प्राप्त कर सकते हैं के रूप में:
char * p = (char *)&var;
char *addressofField2 = p + sizeof(int);
कुछ लिखने की बजाय यह
field2Offset = offsetof (struct test, field2);
और फिर var के प्रारंभिक पते पर ऑफसेट मान जोड़ना?
क्या कोई अंतर है? offsetof
अधिक कुशल का उपयोग कर रहा है?
यदि आप सी के लिए नए हैं, तो 'ऑफ़सेट' और हाथों से हाथ हटाएं। आपको सामान्य प्रोग्रामिंग के लिए इसकी आवश्यकता नहीं होगी, लेकिन शुरुआत में केवल उन्नत सुविधाएं ही गड़बड़ी की संभावना होगी। - अपराध नहीं, लेकिन एक बहुत अच्छी तरह से चेतावनी चेतावनी! – Olaf