13.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 (weitere Beschreibung zu dieser Funktion siehe Abschnitt 13.14). 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 u. U. die Funktion memcmp() um einiges schneller als der Vergleich mit einer for-Schleife, da memcmp() ebenfalls näher an der Hardware operiert.
|
|