11.3 Arrays vergleichen
Mithilfe des Indizierungsoperators [] können Sie zwei int-Arrays auf Gleichheit überprüfen:
/* array6.c */ #include <stdio.h> #include <stdlib.h> #define MAX 10 int main(void) { int i; int array1[MAX], array2[MAX]; for(i = 0; i < MAX; i++) { array1[i] = i; array2[i] = i; } array2[5] = 100; /* array2 an Pos. 5 verändern */ for(i = 0; i < MAX; i++) { if( array1[i] == array2[i] ) continue; else { printf("Unterschied an Position %d\n",i); break; } } return EXIT_SUCCESS; }
Mit der Zeile
if( array1[i] == array2[i] )
werden die einzelnen Werte array1[i] und array2[i] miteinander verglichen. Es werden also alle Elemente der Arrays durchlaufen und verglichen. Folgendes funktioniert allerdings nicht:
if( array1 == array2 )
Ganze Arrays lassen sich nicht miteinander vergleichen. In diesem Fall wurden lediglich zwei Speicheradressen verglichen. Für den Vergleich vollständiger bzw. kompletter Arrays gibt es folgende Funktion:
#include <string.h> int memcmp(const void *adr1, const void *adr2, size_t n);
Diese Funktion vergleicht n Zeichen aus Adresse adr1 und Adresse adr2. Sind beide Speicherbereiche gleich, liefert die Funktion den Wert 0 zurück (zur weiteren Beschreibung dieser Funktion siehe Abschnitt 20.8, »<string.h> – die mem -Funktionen zur Speichermanipulation.« Hierzu ein Beispiel mit der Funktion memcmp():
/* array7.c */ #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX 10 int main(void) { int i; int array1[MAX]; int array2[MAX]; for(i = 0; i < MAX; i++) { array1[i] = i; array2[i] = i; } array2[5] = 100; /* Verändert array2 an Pos. 5. */ if(memcmp(array1, array2, sizeof(array1)) == 0 ) printf("Beide Arrays haben den gleichen Inhalt\n"); else printf("Die Arrays sind unterschiedlich\n"); return EXIT_SUCCESS; }
Internes |
Natürlich gilt bei memcmp() im Vergleich zur for-Schleife dasselbe wie schon bei memset(). Auch hierbei ist unter Umständen die Funktion memcmp() um einiges schneller als der Vergleich mit einer for-Schleife, da memcmp() ebenfalls näher an der Hardware operiert. |
Ihre Meinung
Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.