2012-07-15 12 views

उत्तर

6

आसान उदाहरण: अहस्ताक्षरित चार की एक सरणी

void *memory = malloc(1000); //allocate a pool of memory 
uint8_t *ptr = memory+10; 
*ptr = 1 //set an integer value at byte 10 
uint8_t i = *ptr; //read an integer value from the 10th byte 

आप पूर्णांकों भी उपयोग कर सकते हैं के रूप में स्मृति का इलाज है, लेकिन फिर आप बाइट्स की राशि है जो आप एक ही बार में सेट कर रहे हैं के बारे में ध्यान देना चाहिए।

+0

क्या यह "इंटरमीडिएट" टाइप किए गए पॉइंटर बनाने के बजाय शून्य पॉइंटर कास्टिंग करने के साथ ऐसा करना संभव है? – dtech

+0

बेशक, मैं स्पष्टता के लिए एक मध्यवर्ती प्रतिनिधित्व का उपयोग करता हूं – ziu

3

तो, "काम" से मैं तुम्हारा मतलब यह मानें कि "मैं कैसे भिन्नता/सूचक अंकगणित एक void* पर करते हैं?" आप नहीं कर सकते यदि आप स्मृति के हिस्सों को पढ़ने के लिए चिंतित हैं तो आपको इसे char* पर डालना होगा। बेशक, यदि ऐसा है, तो इसे शुरू करने के लिए इसे char* के रूप में घोषित करें।

+0

मुझे किसी भी प्रकार को पढ़ने/लिखने में दिलचस्पी है, सिर्फ चार नहीं। – dtech

+0

@ddriver: यह कुछ भी नहीं बदलता है। आपको पॉइंटर डालना होगा। टाइप अज्ञात होने पर आप एक ड्रेफरेंस और/या अंकगणित कार्य करने की अपेक्षा कैसे करेंगे? इसका कोई मतलब नही बनता। अंतर्निहित प्रकार क्या है, यह जानने के लिए आपको अतिरिक्त जानकारी उत्तीर्ण करने की आवश्यकता होगी। –

4

नियम सरल हैं:

  • हर सूचक प्रकार (समारोह संकेत को छोड़कर) हानि के बिना, के लिए और शून्य * से डाली जा सकती है।
  • आप शून्य * पॉइंटर्स पर पॉइंटर अंकगणित नहीं कर सकते हैं, और उन्हें
  • आकार (char) परिभाषा के अनुसार 1 को बराबर नहीं कर सकते हैं; इसलिए एक चार सूचक incrementing "कच्चे" सूचक मूल्य
इस से

आप निष्कर्ष निकाल सकते हैं आप के लिए और चार से कास्ट करने के लिए है कि यदि आप "कच्चे" सूचक अंकगणित निष्पादित करना चाहते हैं * करने के लिए "1 जोड़ने" का अर्थ है।

संबंधित मुद्दे