Code:Blase Art in C: Funktion nicht ändern Arraydaten
#include <stdio.h>
void testSort(int values[], int n);
int main(void)
{
int hs[] = {5,3,2,1,4};
printf("Unsorted: %i %i %i %i %i\n", hs[0], hs[1], hs[2], hs[3], hs[4]);
testSort(hs, 5);
printf("Sorted: %i %i %i %i %i\n", hs[0], hs[1], hs[2], hs[3], hs[4]);
}
void testSort(int values[], int n)
{
for (int i = 0; i < n-1; i++)
{
int hold;
int current = values[i];
int next = values[i + 1];
if (current > next)
{
hold = current;
current = next;
next = hold;
}
}
return;
}
Ich versuche Blase Art zu tun, und jetzt geht es durch das Array einmal, aber meine Frage ist: Warum nicht meine ist hs[]
Aktualisierung nach Aufruf der Funktion? Die zweite printf
zeigt, dass es gleich geblieben ist.
EDIT: Wie bereits erwähnt, stellt sich heraus, ich war Ändern von Daten, aber der Kopien. Ich aus irgendeinem Grund, wenn ich die Variablen erstellt current/next
Ich fühlte mich, als ob sie values[i]/values[i+1]
vertreten waren, aber in Wirklichkeit war ich gerade neue Variable erstellen und vorbei der Wert von values[0]
die 5 ist und es zu current
zuweisen. Offensichtlich Werte [] unverändert lassen. Vielen Dank allen
Sie müssen 'Werte [i]' mit 'Werten [i + 1]' vertauschen. Der ganze Code tauscht die Kopien in 'current' und' next'. – user3386109
Ihre Funktion ändert 'values [i]' nirgends. – melpomene
@Fang Sie können ein Array nicht nach Wert übergeben, es wird in einen Zeiger auf sein erstes Element zerlegt. – Quentin