Pointer ve Diziler: C Programlamada Temel Kavramlar ve Kullanım Örnekleri
Giriş – Pointer ve Dizilerin Temel Kavramları
C programlama dilinde pointer (işaretçi) ve dizi kavramları sıkça karşımıza çıkar. İlk bakışta benzer görünebilirler ama aslında farklı şeyleri ifade ederler. Pointer, bellekte bir adresi tutan değişkenken; dizi, aynı türden verilerin ardışık olarak bir arada bulunduğu bir veri yapısıdır. Peki, pointer ve dizi arasındaki farklar nelerdir? Bunları nasıl kullanırız? Gelin birlikte inceleyelim.
Diziler ve Pointerlar Arasındaki Temel Farklar
Dizi Nedir ve Bellekte Nasıl Yer Alır?
Dizi, aynı türden elemanların ardışık olarak saklandığı bir bloktur. Örneğin:
int dizi[3] = {10, 20, 30};Burada dizi isimli değişken, bellekte üç tamsayının yan yana dizildiği bir alanı ifade eder. Dizinin adı, bu blokun başlangıç adresini temsil eder ancak bir değişken değildir, üzerinde atama yapılamaz.

Pointer Nedir ve Nasıl Çalışır?
Pointer, bellekte bir adres tutan değişkendir. Örneğin:
int x = 100;
int *p = &x; // p, x’in adresini tutarBurada p, x değişkeninin adresini saklayan bir işaretçidir. Pointerlar esnektir; ister değişkenlerin adreslerini tutabilir, ister dinamik olarak bellekte yeni alanlar gösterirler. İşaretçiyi başka bir adrese atayabiliriz.

Dizi İsmi ve Pointer Kullanımı Arasındaki Karışıklık
Dizinin ismi, dizinin ilk elemanının adresini temsil ettiği için şöyle bir durum ortaya çıkar:
printf("%d\n", *dizi); // dizi[0] değerini verirBurada *dizi, dizinin ilk elemanına erişir ve dizi bir pointer gibi davranmış olur. Ancak unutmayın; dizi değişken değildir, farklı bir adrese atayamazsınız. Örneğin:
dizi = dizi + 1; // HATA!Oysa pointer ile şunu yapabilirsiniz:
p = p + 1; // p artık bir sonraki elemanın adresini tutarPointer ve Dizi Kullanımında Pratik Örnekler
Dizi Elemanlarına Pointer ile Erişim
Dizileri pointerlar eşliğinde kullanmak kodda esneklik sağlar. Şöyle düşünün:
int dizi[3] = {10, 20, 30};
int *ptr = dizi;
for(int i = 0; i < 3; i++) {
printf("%d ", *(ptr + i));
}Bu kodda ptr + i dizinin i’inci elemanının adresine işaret eder. Böylece pointer artışı ile dizi elemanlarına erişiyoruz.
Pointer ile Dinamik Dizi Oluşturma
C dilinde diziler sabit boyutludur. Eğer boyutu çalışma zamanında belirlemek istiyorsak malloc kullanmalıyız:
#include <stdlib.h>
int n = 5;
int *dinamikDizi = (int*) malloc(n * sizeof(int));
if(dinamikDizi == NULL) {
// Bellek ayırma başarısız
} else {
for(int i = 0; i < n; i++) {
dinamikDizi[i] = i * 10;
}
}
free(dinamikDizi);Bu şekilde pointer sayesinde istediğimiz büyüklükte dizi yaratabiliriz.

Sonuç – Pointer ve Diziler Arasında Ne Zaman Ne Kullanılır?
Özet ve Düşünmeniz Gerekenler
Diziler ve pointerlar birbirine yakın kavramlar ama kesinlikle aynı değildir. Dizi sabit bir blok olarak bellekte yer kaplarken, pointer bir adres tutar ve değiştirilebilir. Dizinin adı pointer gibi davranır ancak kendisi bir değişken değildir. Pointer ise esnekliği ile programlama da büyük avantaj sağlar, özellikle dinamik bellek yönetiminde vazgeçilmezdir.
Sizce, programınızda esneklik mi yoksa basitlik mi daha önemli? Hangi durumda diziyi tercih edersiniz, hangi durumda pointer kullanırsınız? Bu sorulara cevap arayarak pratik yapmak, C dilinde farkı anlamanızda faydalı olur. Unutmayalım ki, pointer ve dizilerle ustaca çalışmak C programcılığında önemli bir adımdır.





