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. 
 | 
 
  
 |