Ich habe eine 50 x 50-Matrix arr[50][50]
und müssen die Werte in der Sub-Array arr[0]
und arr[1]
tauschen. dh die ganzen 50 Elemente in jedem Unterfeld müssen ausgetauscht werden.Swap-Sub-Arrays eines mehrdimensionalen Arrays in C
Die einzige Art, wie ich mir vorstellen kann, dies zu tun ist durch eine Schleife wie mit:
for(i=0; i<50; ++i)
{
int t = arr[0][i];
arr[0][i] = arr[1][i];
arr[1][i] = t;
}
ich mich gefragt, ob es irgendwelche einfachere oder kürzere Methoden waren? Zeiger vielleicht verwenden?
Ich habe versucht, Dinge wie
int *t = arr[0];
arr[0] = arr[1];
arr[1] = t;
aber es gab Fehler in der ersten Zeile über „inkompatible Typen bei der Zuordnung‚int [2]‘vom Typ‚int *‘zu geben“.
Dann habe ich versuchte Zeiger auf ein Array
int (*t)[50] = arr[0];
arr[0] = arr[1];
arr[1] = t;
Diesmal I error etwa bei der zweiten Zeile got "inkompatible Typen beim Zuweisen 'int [50] vom Typ 'int *' eingeben".
Nun wäre ein schnellerer Weg, XOR-Ausdruck zu verwenden statt eine dritte Variable zu verwenden - 'arr [0] [i] = arr [0] [i]^arr [1] [i]; arr [1] [i] = arr [0] [i]^arr [1] [i]; arr [0] [i] = arr [0] [i]^arr [1] [i]; ', Die Komplexität wäre die gleiche, aber die konstanten Faktoren ändern sich. –
Die einzige Möglichkeit, Daten mit dem '=' zu kopieren, stammt von einer einfachen Variablen, einem einzelnen Array-Element oder einer 'struct'. Überlegen Sie sich, 'int temp [50]' und 'memcpy' zu verwenden. –
Sie müssen die Zeilen kopieren (oder tauschen Sie sie aus). Sie können etwas wie 'int tmp [50];' dann 'memcpy (tmp, arr [0], 50 * sizeof * tmp); memcpy (arr [0], arr [1], 50 * sizeof * arr [0]); memcpy (arr [1], tmp, 50 * sizeof * arr [1]); ' –