में पूर्ण सरणी पारित नहीं की जा रही है मैं एक सम्मिलन प्रकार पर काम कर रहा हूं और मुख्य रूप से मेरी सरणी() को केवल आंशिक रूप से क्रमबद्ध करने के लिए पारित किया जाता है()। नीचे स्निपेट से पता चलता है कि test
मुख्य() में मूल्य {2, 1, 3, 1, 2}
है, लेकिन arr
क्रम में() में मूल्य {2, 1}
है। यहाँ क्या चल रहा है?सी
#include <stdio.h>
int sort(int* arr) {
int i = 0;
int j, key;
int count = 0;
printf("Inside sort(): ");
for (j = 0; j < sizeof(arr)/sizeof(int); ++j)
printf("%d ", arr[j]);
printf("\n");
for (j = 1; i < sizeof(arr)/sizeof(int); ++j) {
key = arr[j];
i = j - 1;
while (i >= 0 && arr[i] > key) {
arr[i + 1] = arr[i];
--i;
++count;
}
arr[i + 1] = key;
}
return count;
}
int main(int argc, char* argv) {
int test[] = {2, 1, 3, 1, 2};
int i = 0;
printf("Inside main(): ");
for (i = 0; i < sizeof(test)/sizeof(int); ++i)
printf("%d ", test[i]);
printf("\n");
int count = sort(test);
}
इस से सीखने का सबक सरणी के आकार को उस फ़ंक्शन पर पास करना है जिसे आप बुला रहे हैं। फ़ंक्शन को सरणी के आकार को निर्धारित करने की कोशिश न करें। सामान्य रूप से, फ़ंक्शन आकार निर्धारित नहीं कर सकता है। कुछ चयनित विशेष मामलों में, यह संभव है (उदाहरण के लिए, पॉइंटर्स की सरणी के अंत में एक शून्य सूचक है)। यह कोई दुर्घटना नहीं है कि 'मुख्य()' के लिए तर्क सूची 'int main (int argc, char ** argv) है, भले ही यह उन विशेष मामलों में से एक है जहां शून्य सूचक का अंत निर्धारित करने के लिए उपयोग किया जा सकता है तर्कों की सूची में से। –
संभावित डुप्लिकेट [आकार को कैसे ढूंढें (एक सरणी को इंगित करने वाला पॉइंटर)] (http://stackoverflow.com/questions/492384/how-to-find-the-sizeofa-pointer-pointing-to-an- सरणी) –