जब अधिकांश संदर्भों में एक सरणी अभिव्यक्ति दिखाई देती है, तो इसका प्रकार "टी-एन-एलिमेंट सरणी" से "पॉइंटर टू टी" में परिवर्तित हो जाता है, और इसका मान सरणी में पहले तत्व के पते पर सेट होता है। इस नियम के अपवाद तब होते हैं जब सरणी अभिव्यक्ति sizeof
या पता (&
) ऑपरेटर का पता चलता है, या यदि सरणी अभिव्यक्ति एक स्ट्रिंग अक्षर का उपयोग घोषणा में किसी अन्य सरणी को प्रारंभ करने के लिए किया जा रहा है।
क्या यह आपके कोड के संदर्भ में इसका मतलब है कि box_sort
करने के लिए अपने कॉल में, अभिव्यक्ति boxes
के प्रकार परोक्ष M-element array of N-element array of int
से pointer to N-element array of int
, या int (*)[MAX_DIMENSIONALITY+1]
को, बदल जाती है तो अपने समारोह की तरह पैरामीटर प्रकार की उम्मीद की जानी चाहिए:
void box_sort(int (*arr)[MAX_DIMENSIONALITY+1], int x, int y)
{
...
}
int *a
के बाद से और int a[]
एक समारोह पैरामीटर घोषणा में पर्याय बन गया है, यह इस प्रकार है कि int (*a)[N]
int a[][N]
का पर्याय बन गया है, तो आप
के रूप में ऊपर लिख सकता है
void box_sort(int arr[][MAX_DIMENSIONALITY+1], int x, int y)
{
}
हालांकि मैं व्यक्तिगत रूप से सूचक संकेत पसंद करता हूं, क्योंकि यह अधिक सटीक रूप से दर्शाता है कि क्या हो रहा है। ध्यान दें कि आपके समारोह में, आप सामान्य रूप में arr
सबस्क्रिप्ट होगा:
arr[x][y] = ...;
के बाद से अभिव्यक्ति arr[x]
*(arr + x)
के बराबर है, सूचक परोक्ष dereferenced है।
आप मनमाने ढंग से आकार सरणियों पर काम करने के box_sort चाहते हैं (यानी, सरणियों जहां दूसरे आयाम जरूरी MAX_DIMENSIONALITY +1 नहीं है), तो एक दृष्टिकोण निम्न करने के लिए है:
int boxes[X][Y];
...
box_sort (&boxes[0], X, Y, x, y);
...
void box_sort(int *arr, size_t rows, size_t cols, int x, int y)
{
...
arr[x*cols + y] = ...;
}
मूल रूप से, आप int के 1-डी सरणी के रूप में boxes
का इलाज कर रहे हैं और ऑफसेट को मैन्युअल रूप से गणना कर रहे हैं।
'MAX_BOXES' और' MAX_DIMENSIONALITY' क्या हैं? क्या वे मैक्रोज़, स्थिरांक, ... हैं? – Jacob