void
पॉइंटर को देखते हुए, यदि मैं void
सूचक बिंदु x
बाइट्स आगे बनाना चाहता हूं, तो यह कैसे किया जाएगा? char
पॉइंटर को कास्टिंग करने से बेहतर तरीका है?शून्य सूचक अंकगणितीय
उत्तर
को एक चार सूचक कास्टिंग करने से बेहतर तरीका है?
नहीं (एक char *
होने एक void *
के बजाय, के साथ शुरू करने के लिए, ताकि आप सब पर यह कास्ट करने के लिए की जरूरत नहीं है को छोड़कर)।
यदि यह वांछनीय या संभव नहीं है, तो एक ही रास्ता है:
ptr = static_cast<char *>(ptr) + offset;
(ध्यान दें:। आप सी ++ में सामान की इस तरह, आमतौर पर वहाँ एक बेहतर समाधान है जब तक कर रहे हैं आप एक विशेषज्ञ हैं और आपने पहले से ही हर दूसरे विकल्प से इंकार कर दिया है, मेरा सुझाव है कि आप एक नया सवाल पूछें कि क्या करने का प्रयास करने का कोई बेहतर तरीका है!)
जैसा कि आपने सुझाव दिया है, मैंने यहां एक और प्रश्न पोस्ट किया है http://stackoverflow.com/questions/3378090/custom-memory-manager – aCuria
this question, और this question पर एक नज़र डालें । संक्षेप में, उत्तर को बाइट स्तर पर अंकगणित के लिए char *
पर डालना है।
एक शून्य सूचक को देखते हुए, यदि मैं आगे शून्य बाइट्स को शून्य पॉइंटर पॉइंट बनाना चाहता हूं, तो यह कैसे किया जाएगा? एक चार सूचक को कास्टिंग करने से बेहतर तरीका है?
यदि आपके पास void*
है, तो आप नहीं जानते कि "x बाइट्स आगे" एक मान्य पता है। आप नहीं जानते कि इस तरह के पॉइंटर बनाने से आपके प्रोग्राम को क्रैश नहीं होगा।
और यही कारण है कि यह void*
के साथ नहीं किया जा सकता है।
आप केवल एक सरणी में पॉइंटर्स पर पॉइंटर अंकगणित कर सकते हैं। और यदि आपके पास किसी सरणी में पॉइंटर है, तो आप सरणी के प्रकार को जानते हैं, और समकक्ष सूचक प्रकार का उपयोग कर सकते हैं।
आप सार "बाइट सूचक" किसी तरह का चाहते हैं (उदाहरण के लिए, आप एक स्मृति पूल को लागू करने और एक विशिष्ट एक बफर में ऑफसेट करने के लिए बात करने के लिए की जरूरत है कर रहे हैं), तो आप char*
या unsigned char*
, नहीं void*
उपयोग करना चाहिए।
पॉइंटर अंकगणितीय कंपाइलर करते समय पॉइंटर को इंगित करने वाले प्रकार के बारे में क्या पता है, यह ध्यान में रखना चाहता है।
उदाहरण के लिए यदि आपके पास int *myint
है। तो फिर इन दोनों के बयान वास्तव में एक ही बात करते हैं:
int a = *(myint+5);
और
int a = myint[5];
इस मामले
myint+5
में
मतलब यह नहीं है "मींट का पता प्लस 5" लेकिन "मींट का पता प्लस 5 * sizeof (int)) "
तो void *
के मामले में संकलक कोई अनुमान नहीं लगा सकता कि void * + 5
का क्या अर्थ होना चाहिए। तो इससे पहले कि आप शून्य का उपयोग करें * यह आपको यह बताने के लिए मजबूर करता है कि आप इसका उपयोग कैसे करना चाहते हैं।
यह सी संकलक की तरह आकार (शून्य) = 1 मान सकता है। लेकिन निश्चित रूप से यह बहुत आसान होगा। – Minthos
इस प्रश्न का उत्तर देने वाले अन्य लोगों के अंतर में, ऐसा लगता है कि एक साधारण +x
(बिल्कुल कोई कास्टिंग नहीं) आपके शून्य सूचक से x
बाइट्स पते तक पहुंचने के लिए पर्याप्त है। संकलक इसे पसंद नहीं कर सकता है, लेकिन कम से कम मामलों में मैंने इसका उपयोग किया है, यह काम किया है। मैं g++
(gcc
) का उपयोग कर रहा हूं ...
तो जब तक आप जानते हैं कि आप क्या कर रहे हैं, कोई जांच नहीं है।
शून्य पॉइंटर्स पर अंकगणित सी ++ में परिभाषित नहीं किया गया है। 'शून्य 'एक अपूर्ण प्रकार है, और पॉइंटर अंकगणितीय केवल पूरी तरह परिभाषित प्रकारों के लिए काम करता है। – Mat
यहाँ मेरी समस्या
void *inputAudioBuffer;
ग था ++ मुझे एक प्रकार डाली मैं यह कर कर रहा था करने के बाद इस
UInt16 *inputBuffer = (UInt16 *)(inputAudioBuffer + inputBufferOffset);
कर दे नहीं कर रहा था
UInt16 *inputBuffer = (UInt16 *)((UInt16 *) inputAudioBuffer + inputBufferOffset);
- 1. शून्य सूचक और शून्य सूचक के बीच क्या अंतर है?
- 2. यूनियन बनाम शून्य सूचक
- 3. सी Dereference शून्य * सूचक
- 4. एंड्रॉइड glsurfaceview शून्य सूचक अपवाद
- 5. शून्य सूचक अपवाद प्रारंभिक सेवा
- 6. शून्य * बनाम चार * सूचक अंकगणित
- 7. (शून्य) सी में सूचक/C++
- 8. एंड्रॉयड: this.getApplication() रिटर्न शून्य सूचक
- 9. क्यों String.valueOf (शून्य) शून्य सूचक अपवाद पैदा कर रहा है?
- 10. सी ++ में शून्य सूचक क्या है?
- 11. इटरेटर शून्य सूचक के बराबर है?
- 12. एक शून्य सूचक को मुक्त करना
- 13. एंड्रॉइड पर SQLiteOpenHelper.getWriteableDatabase() शून्य सूचक अपवाद
- 14. शून्य * सूचक में समस्या का संदर्भ?
- 15. "शून्य सूचक असाइनमेंट त्रुटि" क्या है?
- 16. सी ++ में शून्य करने के लिए सूचक?
- 17. सी: शून्य सूचक से प्रकार Extrapolating
- 18. View.getDrawingCache() में शून्य सूचक से कैसे बचें?
- 19. बैश: $ [<अंकगणितीय अभिव्यक्ति>] बनाम $ ((<अंकगणितीय अभिव्यक्ति>))
- 20. तार्किक, अंकगणितीय बिटवाई बदलाव
- 21. कस्टम प्रोलॉग अंकगणितीय फ़ंक्शन
- 22. बिट-वेक्टर अंकगणितीय
- 23. बुनियादी अंकगणितीय आपरेशनों
- 24. बाश अंकगणितीय अभिव्यक्ति
- 25. गैर-रैखिक अंकगणितीय
- 26. बिट वेक्टर अंकगणितीय
- 27. सी ++ अंकगणितीय संवर्धन शीर्षलेख
- 28. सी सामान्य अंकगणितीय रूपांतरण
- 29. एक शून्य सूचक और एक पूर्ण सूचक के बीच क्या अंतर है?
- 30. दो बिटमैप छवियों के संयोजन में शून्य सूचक अपवाद
मैंने पूछा है एक मैं यहां क्या करने की कोशिश कर रहा हूं इसके व्यापक दायरे के साथ सवाल। मैं जानना चाहता हूं कि ऐसा करने का एक बेहतर तरीका है, शून्य को शून्य * कास्टिंग करने का विचार मुझे एक हैक जैसा लगता है। http://stackoverflow.com/questions/3378090/custom-memory-manager – aCuria
aCuria मैंने भावना साझा की। इसलिए 2 प्रश्न जो पहले से ही इस बारे में मौजूद हैं, मैंने अपने उत्तर में लिंक किया है। –
यदि आपके पास अधिकतर सी प्रोग्राम है जो कुछ सी ++ सुविधाओं का उपयोग करने के लिए होता है, तो संकलक आपके प्रोग्राम में हर शून्य * के बारे में शिकायत करेगा। मेरी राय में, संकलक फिर कुछ गलत कर रहा है, प्रोग्रामर नहीं। तो एक कामकाज आवश्यक है, एक पूर्ण कार्यक्रम नवीनीकरण नहीं। – Minthos