दिलचस्प पोस्ट
IPhone में उद्देश्य-सी में प्रकार लिनक्स के तहत जावा से वर्चुअल मेमोरी उपयोग, बहुत ज्यादा मेमोरी इस्तेमाल की गई एनजी-क्लिक गतिशील रूप से उत्पन्न HTML से काम नहीं कर रहा है मॉडल में वर्तमान_उज़र एक्सेस करें सीएसएस संपत्ति से पहले तारांकन का उद्देश्य मैं निकटतम एक्स मिनट में समय कैसे बढ़ा सकता हूं? कोई समवर्ती सूची <टी> में नेट 4.0? अन्य स्रोत के लिए पायथन खोज पथ का विस्तार करें एक वेब पेज के लोड और निष्पादन अनुक्रम? जावास्क्रिप्ट में चक्र के लिए अतुल्यकालिक मैं Google ऐप इंजन के साथ तीसरे पक्ष के पायथन पुस्तकालयों का प्रबंधन कैसे करूं? (वर्चुअलव्यू? पीप?) मर्ज किए गए सभी गिट शाखाओं को मैं कैसे हटा सकता हूं? सी # में संदर्भ-प्रकार चर के लिए "रेफरी" का क्या उपयोग है? सी में आप stdin / stdout / stderr को एक execvp () या समान कॉल करते समय फ़ाइलों में कैसे रीडायरेक्ट करते हैं? एसक्यूएल पहचान (ऑटोटनम्बर) एक लेनदेन रोलबैक के साथ भी बढ़ी है

सूचक अंकगणित में सी

निम्नलिखित कोड खंड पर विचार करें:

int (*p)[3]; int (*q)[3]; q = p; q++; printf("%d, %d\n", q, p); printf("%d\n", qp); 

मुझे पता है कि सूचक अंकगणितीय बुद्धिमान है, जिसका अर्थ है कि अगली 3-पूर्णांक-सरणी को इंगित करने के लिए ऑपरेशन q++ अग्रिम q पर्याप्त बाइट्स हैं, इसलिए यह मुझे आश्चर्य नहीं है कि पहला प्रिंट 12, 0 ' है जिसका अर्थ है कि वृद्धिशील q इसे 12 में बड़ा बना दिया

लेकिन दूसरा प्रिंट मुझे आश्चर्यचकित करता है यह 1 प्रिंट करता है!
तो यह 12 के बजाय 1 प्रिंट क्यों करेगा? यह सिर्फ मुझे पहेली

वेब के समाधान से एकत्रित समाधान "सूचक अंकगणित में सी"

++ इंचालिमेंट ऑपरेटर की तरह, पॉइंटर्स के साथ- घटाव ऑपरेटर भी ऑब्जेक्ट्स के आकार को ध्यान में रखता है। विशेष रूप से, परिणाम दिया जाता है, पॉइंटर मूल्यों में बाइट्स फर्क की संख्या, जो इंगित-टू ऑब्जेक्ट के आकार से विभाजित है (12, आपके उदाहरण में)। तो अंतर 12 बाइट्स है, जो कि आकार 12 या 1 से विभाजित है।

यदि आप वास्तव में अंतर जानना चाहते हैं तो प्रत्येक पॉइंटर्स को प्रत्येक (चार *) और फिर (int) में डालें और फिर घटाएं। यही आपको जवाब देना चाहिए।

यह कोड आपको पूर्ण मूल्य देता है:

 printf("%d\n", abs((int)((char*)q) - (int)((char*)p))); 

गणित को शामिल करना याद रखें।

संपादित करें: जैसा कि एक टिप्पणी में बताया गया है, हमें दोहरे कलाकारों की आवश्यकता नहीं है। प्रत्येक सूचक सूचक को पूर्णांक में कास्ट करना और फिर घटा देना समान उत्तर देता है (अनावश्यक) ऊपर का दोहरी कास्टिंग।

 printf("%d\n", abs((int)(q) - (int)(p)));