Je travaille sur un tri d'insertion et mon tableau dans main() ne semble être que partiellement transmis à sort(). L'extrait ci-dessous montre que test
dans main() a la valeur {2, 1, 3, 1, 2}
, mais arr
dans sort() a la valeur {2, 1}
. Que se passe t-il ici?Le tableau complet n'est pas transmis 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 leçon à tirer de ceci est de passer la taille de la matrice à la fonction que vous appelez. N'essayez pas de faire en sorte que la fonction détermine la taille du tableau. En général, la fonction ne peut pas déterminer la taille. Dans certains cas particuliers, c'est possible (par exemple, il y a un pointeur nul à la fin d'un tableau de pointeurs). Ce n'est pas un accident que la liste des arguments de 'main()' soit 'int main (int argc, char ** argv)', même si c'est l'un des cas spéciaux où le pointeur nul peut être utilisé pour déterminer la fin de la liste des arguments. –
duplication possible de [Comment trouver le sizeof (un pointeur pointant vers un tableau)] (http://stackoverflow.com/questions/492384/how-to-find-the-sizeofa-pointer-pointing-to-an- array) –