Я работаю над сортировкой вставки, и мой массив в main(), кажется, частично передан в sort(). В приведенном ниже фрагменте показано, что test
в main() имеет значение {2, 1, 3, 1, 2}
, но arr
в sort() имеет значение {2, 1}
. Что тут происходит?Полный массив не передается в C
#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);
}
Урок, чтобы узнать из этого, состоит в том, чтобы передать размер массива функции, которую вы вызываете. Не пытайтесь заставить функцию определять размер массива. В общем случае функция не может определить размер. В некоторых отдельных случаях это возможно (например, есть нулевой указатель в конце массива указателей). Не случайно, что список аргументов для 'main()' is 'int main (int argc, char ** argv)', хотя это один из особых случаев, когда нулевой указатель можно использовать для определения конца списка аргументов. –
Возможный дубликат [Как найти sizeof (указатель, указывающий на массив)] (http://stackoverflow.com/questions/492384/how-to-find-the-sizeofa-pointer-pointing-to-an- array) –