Проверка равенства массивов

Массивы и коллекции / Массивы

int n1[] = {1, 2, 3};
int n2[] = {1, 2, 3};
int n3[] = {3, 2, 1};

//n1 == n2 compares the addresses of the arrays, not the elements;
//memcmp compares the bytes: right for integers
bool equal1 = sizeof n1 == sizeof n2 && memcmp(n1, n2, sizeof n1) == 0;
//equal1 is true
bool equal2 = sizeof n1 == sizeof n3 && memcmp(n1, n3, sizeof n1) == 0;
//equal2 is false

//not for double: 0.0 and -0.0 are equal, but their bytes differ
//(and structs have padding bytes); compare them element by element
double d1[] = {0.0, 1.5};
double d2[] = {-0.0, 1.5};
bool sameBytes = memcmp(d1, d2, sizeof d1) == 0;
//sameBytes is false

bool equal3 = true;
for (size_t i = 0; i < sizeof d1 / sizeof d1[0]; i++) {
    if (d1[i] != d2[i]) {
        equal3 = false;
        break;
    }
}
//equal3 is true

printf("equal1 is %s\n", equal1 ? "true" : "false");
printf("equal2 is %s\n", equal2 ? "true" : "false");
printf("sameBytes is %s\n", sameBytes ? "true" : "false");
printf("equal3 is %s\n", equal3 ? "true" : "false");