के संदर्भ में सी में ** और ** के बीच अंतर I गतिशील रूप से आवंटित 2 डी सरणी के साथ मैट्रिक्स गुणा करने के लिए होमवर्क असाइनमेंट पर काम कर रहा हूं। इस प्रकार2 डी मैट्रिक्स
int **a;
और फिर प्रारंभ और इसे लोड:
void loadMatrix(FILE* fp, int** matrix, int rowSize, int colSize) {
for (int i = 0; i < rowSize; i++) {
for (int j = 0; j < colSize; j++) {
fscanf(fp, "%d", &matrix[i][j]);
}
}
}
इस प्रकार मैं एक वैश्विक चर के रूप में मेरी मैट्रिक्स की घोषणा: मैं मैट्रिक्स लोड करने के लिए निम्नलिखित समारोह में लिखा है
// allocate memory for the array rows
a = (int **) malloc(m * sizeof(int*));
// allocate memory for array columns
for (int i = 0; i < m; i++) {
a[i] = malloc(k * sizeof(int));
}
loadMatrix(fp, a, m, k);
सब कुछ अपेक्षित काम करता है, हालांकि शिक्षक द्वारा दिए गए फ़ंक्शन हस्ताक्षर निम्नलिखित हैं:
void loadMatrix(FILE*, int ***, int, int);
मुझे लगता है कि हस्ताक्षर उपयोग करने की कोशिश, और मैट्रिक्स & का उपयोग कर, और मेरे loadMatrix समारोह से & को हटाने, यह सोचकर कि outputs एक ही होना चाहिए के पते में पारित, लेकिन का उपयोग कर *** अपेक्षा के अनुरूप काम नहीं करता है। मैं क्या खो रहा हूँ? यदि कोई है तो ट्रिपल पॉइंटर्स का उपयोग करने का क्या फायदा होगा?
'loadMatrix (fp, और a, m, k); 'और फ़ंक्शन के अंदर malloc'd करें। – BLUEPIXY
बस 'और मैट्रिक्स [i] [j] 'से' & (* मैट्रिक्स) [i] [j] 'fprintf' में और' loadMatrix (fp, और a, m, k) 'पर फ़ंक्शन कॉल बदलें। – haccks
@ haccks वाह जो ठीक काम किया। तो वह क्यों है? मुझे लगता है कि & & * एक अर्थ में एक-दूसरे को रद्द करना चाहिए। मैं गलतफहमी क्या कर रहा हूं? –