Estoy trabajando en una ordenación de inserción y mi matriz en main() parece que solo se pasa parcialmente a sort(). El siguiente fragmento muestra que test
en main() tiene el valor {2, 1, 3, 1, 2}
, pero arr
en sort() tiene el valor {2, 1}
. ¿Que está pasando aqui?No se aprobó la matriz completa en 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);
}
La lección para aprender de esto es pasar el tamaño de la matriz a la función que está llamando. No intente hacer que la función determine el tamaño de la matriz. En general, la función no puede determinar el tamaño. En algunos casos especiales seleccionados, es posible (por ejemplo, hay un puntero nulo al final de una matriz de punteros). No es un accidente que la lista de argumentos para 'main()' sea 'int main (int argc, char ** argv)', aunque ese es uno de los casos especiales donde el puntero nulo puede usarse para determinar el final de la lista de argumentos. –
posible duplicado de [Cómo encontrar el tamaño de (un puntero apuntando a una matriz)] (http://stackoverflow.com/questions/492384/how-to-find-the-sizeofa-pointer-pointing-to-an- array) –