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]);