2016-06-17 1 views
-4

Je voudrais imprimer le résultat du tri de la coquille d'un tableau avec 1000 éléments. La fonction est de type void, donc je veux savoir comment récupérer la valeur "retourné" de la fonction (pas vraiment retourné, en fait le résultat). C'est mon code jusqu'à présent:Impression d'une fonction vide en langage C

#include "stdafx.h" 
#include <stdlib.h> 
void shellsort(int v[], int n) 
{ 
    int gap, i, j, temp; 
    for (gap = n/2; gap > 0; gap /= 2) 
     for (i = gap; i < n; i++) 
      for (j = i - gap; j >= 0 && v[j] > v[j + gap]; j -= gap) 
       temp = v[j]; 
    v[j] = v[j + gap]; 
    v[j + gap] = temp; 


} 
int main() 
{ 

    int i; 
    int my_array[1000]; 

    for (i = 0; i < 1000; i++) { 
     my_array[i] = rand(); 
    } 

    shellsort(my_array, 1000); 


    return 0; 
} 
+0

que voulez-vous dire, « imprimer une fonction vide »? Les fonctions vides n'ont pas de valeur de retour, elles ne peuvent donc rien retourner à imprimer. –

+1

Heck, que voulez-vous dire par "imprimer une fonction"? – user2357112

+0

Vous ne voulez sûrement pas imprimer la fonction elle-même. Comme il ne renvoie rien, vous ne pouvez pas non plus vouloir imprimer sa valeur de retour. Je suppose que vous voulez imprimer le contenu du tableau trié, soit avant le tri, après, ou les deux. Alors fais ça. –

Répondre

2

En C, les tableaux passent « comme référence » (comme un pointeur, pour les programmeurs C plus avancés) aux fonctions. Cela signifie que toute modification apportée par la fonction à un tableau affecte le tableau dans la fonction d'appelant.

Cela signifie que my_array (après avoir appelé la fonction) contient maintenant le tableau trié (car la fonction l'a modifié).

Ainsi, au lieu d'une valeur de retour, vous pouvez juste imprimer my_array, comme ça:

int main() 
{ 

    int i; 
    int my_array[1000]; 

    for (i = 0; i < 1000; i++) { 
     my_array[i] = rand(); 
    } 

    shellsort(my_array, 1000); 

    for (i = 0; i < 1000; i++) { 
     printf("%d\n", my_array[i]); 
    } 

    return 0; 
} 
+1

Veuillez noter: dans ** C ** il n'y a pas de "passage par référence" _. Dans ** C **, un tableau est transmis en tant que _pointer à son premier élément. Le pointeur est passé _by value_, mais le tableau n'est pas copié, ce qui permet à la fonction appelée de modifier son contenu. – user3078414

+0

Un pointeur n'est pas ** une référence! Et vous ne passez pas un tableau par pointeur (au moins pas en tant que tableau), mais un pointeur vers le premier élément. – Olaf

+0

Bien sûr, bien sûr. Mais dire "passer par référence" est beaucoup plus clair pour un débutant (en supposant qu'il n'a pas encore appris les pointeurs et les sujets plus compliqués) –

0

Modifier le forloop innnermost à

for (j = i - gap; j >= 0 && v[j] > v[j + gap]; j -= gap) 
    { 
    /* You need {} for a block of statements 
    * if you miss the {}, the forloop will have only the next immediate 
    * statement under its jurisdiction 
    */ 
    temp = v[j]; 
    v[j] = v[j + gap]; 
    v[j + gap] = temp; 
    } 

Une fonction de type void ne retournera rien. Cependant, puisque vous obtenez le tableau trié dans le main.

Vous pouvez imprimer le tableau à l'aide d'un simple for-loop comme

for (i = 0; i < 1000; i++) { 
     printf("%d\n", my_array[i]); 
    } 
+0

Puis-je savoir à quoi sert cette downvote? – sjsam