C dilinde dizi isimleri constant pointer olarak tutulur. Eğer hafıza ayırma işlemini saymazsak şu ikisi eşit olacaktır.
conts int *arr
int arr[10]
Bu çeşitlilik oluşturuyor. Örneğin bir dizinin ikinci elemanına ulaşmak isterseniz
printf("%d\n", arr[1])
printf("%d\n", *(arr+1))
ifadelerini kullanabilirsiniz. Burada arr bir pointer olduğundan ve bir pointerda dört işlem yapmak pointer aritmetiğini sağladığından arr+1 aslında arr in memory addresinden 4 byte (integer'i 4 byte kabul ettim) sonrasını gösteren bir pointer oluyor. *(arr+1) ise bu memory adresindeki değere ulaşmamızı sağlıyor.
Bunlara ek olarak karakter dizilerini de yazdırırken ve/veya scanf ile alırken sadece isimlerini kulllanmamızın sebebi de budur.
scanf("%s", charArr)
printf("%s", charArr)
Detaylı bilgi için C Arrays & pointers