Site icon IT Tutorial

C# TA POİNTER KULLANIMI

Pointer değişken, bellekte tutulan bir değerin adresini göstermektedirler.

Bu konuyu daha iyi anlayabilmek için öncelikle belleğin (RAM’in) yapısını inceleyelim.

RAM’in Yapısı

Herhangi bir programlama dilinde bir program yazdık. Bu yazılımın exe dosyasını çalıştırdığımız zaman, harddiskte kayıtlı olan exe dosyası, çalışabilmek için öncelikle harddiskten daha hızlı olan RAM’e kopyalanır ve RAM – işlemci arasında çalışmasını yapar. Kayıt işlemlerinde ise harddiske yazma komutuyla işlem yapılır.

Programımız çalıştığı zaman bellekte onun için belirli bir alan ayrılmamıştır. İşlemci, dosyayı RAM içerisine rastgele yerleştirir ve adres bilgilerini kaydeder. Programımızın istenen noktasına ulaşması gerektiğinde adrese gidip o veriyi kullanabilir.

Bilgisayar sistemlerinin bu kadar gelişmediği dönemlerde bellek yönetimi çok önemli bir konuydu. Büyük çaplı bir yazılım hazırlandığında belleğin dolma ihtimali olduğundan değişkenler kullanıldığı oranda bellekte tutulur, fonksiyonlar arasında değişken göndermesi sırasında değişkenin bir kopyası değil, adres bilgisi gönderilirdi. Adres bilgisini kısaca inceleyelim:

Basitçe inceleyecek olursak, bellek aşağıdaki gibi bir yapıya sahiptir. Yazılımımız içerisinde her değişken değerini bir kutucuğa yerleştirdiğimizi düşünelim (100% bu şekilde değildir). Bu değişkenlerin değerlerine ulaşabilmek için onların adres bilgilerine ihtiyacım olacaktır. Sol tarafta görünen “… 110A, 110B, … ,110F, …” değerleri, belleğimizin adres bilgileridir. Örnekte “110C” adresli kutucuğa 22 değeri aktarılmıştır.

Bir değişkeni bir fonksiyondan diğerine göndermem gerektiğinde aşağıdaki gibi bir işlem yapabiliriz:

 private void A()

{

      int sayi2 = 22;

B(sayi2);

}

private void B(int sayi)

{ }

Bu işlem yapıldığında prosedürünün içinde tanımlanmış olan sayi2 isimli değişkenin değeri, B fonksiyonuna gönderilirken bellekte B prosedürünün için bellekte metin isminde bir değişken oluşturulur, değeri de 22 olur.

Bu işlemi pointer ile yapmış olsaydık, B prosedürüne gönderdiğimiz değer sayi2 değişkenin değeri değil, bulunduğu adres bilgisi olacaktı. Yani ben “110C” adresini gönderecektim, metin değişkeni, “110C” adresindeki değeri kullanacaktı, bellek içerisinde aynı değer için farklı bir yer ayırmasına gerek kalmazdı.

C#’ta pointer kullanabilmek için öncelikle Visual Studio’da unsafe kodlamaya izin vermemiz gerekmektedir.

Project -> ProjeAdı.Properties seçeneğini açalım.

Build sekmesinden “Allow unsafe code” seçeneğini işaretleyelim.

Şimdi pointer değişken içeren kodumuzu oluşturabiliriz.

private unsafe void MesajGoster()

{

int sayi = 22;

int* deger = &sayi;

MessageBox.Show((*deger).ToString());

}

sayi isimli Integer türünden bir değişken oluşturduk ve 22 değerini atadık.

adres isminde Integer türünde bir pointer değişken oluşturduk ve sayi değişkeninin adresini atadık.

adresi 1 artırdık.

adres adresinde bulunan değeri ekranda gösterdik:

NOTLAR:

Pointer değişkenlerinin tanımlanma kuralları:

1. Pointer değişkenler * ile tanımlanır : int* deger

2. & : Pointer olmayan bir değişkenin adres bilgisini verir:  &sayi

3. Pointer değişkendeki adres bilgisini alabilmek için değişken adını kullanmalıyız: deger = &sayi

MEHMET SALİH DEVECİ

YAZILIM MÜHENDİSİ

Exit mobile version