मेरे पास एक ऐसा फ़ंक्शन है जो एक फ़्लोटिंग पॉइंट सरणी में पॉइंटर लेता है। अन्य स्थितियों के आधार पर, मुझे पता है कि सूचक वास्तव में 2x2 या 3x3 मैट्रिक्स को इंगित कर रहा है। (वास्तव में स्मृति को प्रारंभ में आवंटित किया गया था, उदाहरण के लिए फ्लोट एम [2] [2]) महत्वपूर्ण बात यह है कि मैं फ़ंक्शन बॉडी में यह दृढ़ संकल्प करना चाहता हूं, फ़ंक्शन तर्क के रूप में नहीं।फिक्स्ड साइज की एक बहुआयामी-सरणी में सरल पॉइंटर कैसे डाला जाए?
void calcMatrix(int face, float * matrixReturnAsArray)
{
// Here, I would much rather work in natural matrix notation
if(is2x2)
{
// ### cast matrixReturnAsArray to somethingAsMatrix[2][2]
somethingAsMatrix[0][1] = 2.002;
// etc..
}
else if(is3x3)
{ //etc...
}
}
मुझे पता है कि मैं इस समस्या को बेहतर ढंग से संबोधित करने के लिए टेम्पलेट्स और अन्य तकनीकों का उपयोग कर सकता हूं। मेरा सवाल वास्तव में ### टिप्पणी पर इस तरह का कलाकार बनाने के बारे में है। सी ++ में काम करना
typedef float Matrix_t[2][2];
Matrix_t* someThingAsMatrix = (Matrix_t*) matrixReturnAsArray;
इस सी ++ और नहीं सी है, हालांकि, आप एक मैट्रिक्स बनाने चाहिए:
मुझे लगता है कि आप गलत समस्या को हल करने की कोशिश कर रहे हैं (यानी "कैसे डालना है?" * शायद ही कभी सही समस्या है)। मैंने "बहु-आयामी सरणी का आसानी से उपयोग कैसे करें" की समस्या का एक सरल समाधान लिखा है? एक बार: http://ideone.com/gytw7 –
एक बहुआयामी * कुछ * के लिए 'फ्लोट *' अंक नहीं है (वास्तव में भयानक कास्टिंग को छोड़कर जो आपको नहीं करना चाहिए और मुझे आश्चर्य होगा अगर एक कंपाइलर चलो आप)। एक फ्लोट पर एक 'फ्लोट *' अंक, जो एकल-आयामी फ्लोट सरणी में पहला मान हो सकता है। लेकिन यह किसी भी उप-सरणी को इंगित नहीं करता है, क्योंकि आपको एक बहुआयामी सरणी की आवश्यकता होगी। 2x2 और 3x3 दोनों 2 डी हैं, इसलिए दोनों 'फ्लोट **' हो सकते हैं। वास्तव में, हालांकि, आप एक समर्पित 'मैट्रिक्स' कक्षा का निर्माण और उपयोग करने से बेहतर होगा (या खोज)। – KRyan
ठीक है, मैं अपने इनपुट तर्क को फ्लोट ** में बदल सकता हूं।लेकिन क्या आप कह रहे हैं कि मामले में एएमडीएआरए [3] [3] तैरते हैं, तत्वों का भंडारण निरंतर होने की गारंटी नहीं है? – NoahR