*arr = 0;
*(arr+1) = -1;
printf("%p | %p | %d | %d | %d\n", arr, &(arr[0]), arr[0], arr[1], arr[2]);
00B9F714 | 00B9F714 | 0 | -1 | 3
arr2 = arr;
arr2[0] = 0;
и увидите, что arr[0] тоже изменился, то есть вы получили не копию массива, а указатель на тот же участок памяти. void array_copy(int *dst, int *src, int size)