पर विचार करें निम्नलिखित कोड टुकड़ा:सूचक अंकगणित सी में
int (*p)[3];
int (*q)[3];
q = p;
q++;
printf("%d, %d\n", q, p);
printf("%d\n", q-p);
मुझे पता है कि सूचक अंकगणित बुद्धिमान है, जिसका अर्थ है कि आपरेशन q++
अग्रिम q
पर्याप्त बाइट्स आगे एक अगले 3-पूर्णांक सरणी को इंगित करने के, तो यह मुझे आश्चर्य नहीं है कि पहले प्रिंट जिसका अर्थ है कि incrementing q
यह 12.
में बड़ा किया लेकिन दूसरे प्रिंट मुझे तो हैरानी करता है '12, 0
'। यह 1 प्रिंट करता है!
तो यह 12 के बजाय 1 क्यों प्रिंट करेगा? यह सिर्फ मुझे पहेली करता है।
तो दो पॉइंटर्स लेने और बाइट्स में अपना अंतर पाने का कोई तरीका नहीं है? –
पॉइंटर्स को (char *) पर कास्ट करें, तो आपको बाइट्स में अंतर मिलेगा। –
@Leif: या बस आकार (your_type) द्वारा अंतर को गुणा करें। –