Arrays and Pointers are deeply connected in C. The name of an array is actually a constant pointer to its first element. This means you can use a pointer to iterate through an array just like using an index.
For example, if arr is an array, then arr[0] is the same as *arr and arr[1] is the same as *(arr + 1). Pointers give more flexibility than array indexing — for instance, you can assign a pointer to point to any part of the array or even a different memory location altogether.
However, unlike pointers, array names cannot be reassigned to point elsewhere — they are fixed to the block of memory allocated at declaration.