Copying an array

Arrays and collections / Arrays

typedef struct {
    int items[5];
} Numbers;

void printArray(const char *name, const int arr[], size_t count) {
    printf("%s is {", name);
    for (size_t i = 0; i < count; i++) {
        if (i > 0) {
            printf(", ");
        }
        printf("%d", arr[i]);
    }
    printf("}\n");
}

int numbers1[] = {1, 2, 3, 4, 5};
int numbers2[5];

//an array cannot be assigned: numbers2 = numbers1 does not compile
memcpy(numbers2, numbers1, sizeof numbers1);
//numbers2 is {1, 2, 3, 4, 5}

//an array inside a struct is copied by plain assignment
Numbers a = {{1, 2, 3, 4, 5}};
Numbers b = a;
b.items[0] = 100;
//b.items[0] is 100, a.items[0] is 1

//copying a pointer copies no elements: both see the same array
int *alias = numbers1;
alias[0] = 10;
//numbers1[0] is 10, numbers2[0] is 1

printArray("numbers2", numbers2, 5);
printf("b.items[0] is %d\n", b.items[0]);
printf("a.items[0] is %d\n", a.items[0]);
printf("numbers1[0] is %d\n", numbers1[0]);
printf("numbers2[0] is %d\n", numbers2[0]);