При передаче массива в качестве параметра этот
void arraytest(int a[])
означает то же самое, что и
void arraytest(int *a)
, поэтому вы равны , изменяя значения в основном.
По историческим причинам массивы не являются гражданами первого класса и не могут быть переданы по значению.