10 Mayıs 2016 Salı

Neden Pointer Tipini Kullanırız ?

Uygulama içersinde bir dosyanın son değiştirilme zaman bilgisine ihtiyacım olmuştu.

Sonrasında GetFileTime Windows API fonksiyonu sayesinde, aşağıda ki şekilde bir kodlama ile dosyanın son değiştirilme zaman bilgisini elde ettim.

Buraya kadar herşey normal.


Dikkatimi çeken ise nokta ise GetFileTime fonksiyonun LPFILETIME tipinde ki parametreleri idi.


LPFILETIME tipinin tanımını incelediğimde ise;
LPFILETIME isminin bir pointer tipi olduğunu görmekteydim.



Sonrasında GetFileTime fonksiyonunun lpCreationTime,lpLastAccessTime,lpLastWriteTime parametrelerinin, neden _FILETIME *lpCreationTime şeklinde değilde, LPFILETIME lpCreationTime tipinde tanımlanmış olabilir acaba diye düşündüm.


GetFileTime fonksiyonunun parametreleri yukarıda ki gibi tanımlanmış olsaydı, parametre olarak göndereceğimiz değişkenlerin pointer tipinde veya & işareti ile değişkenlerin adreslerinin gönderilmesi gerekecekti.

Yada GetFileTime fonksiyonunun şuan ki mevcut halini, aşağıda ki şekilde _FILETIME tipinde pointer değişken tanımlayıp çağırabilmemizin mümkün olduğunu görüyoruz.







Şimdi yukarıda ki incelemeler doğrultusunda;
"Neden pointer tipini kullanırız ?" sorusuna cevap verebiliriz.

Her defasında  pointer işareti(*) ile değişken tanımlayarak kendimizi tekrar etmek yerine,bir defaya mahsus olarak pointer tipini tanımlayıp(*LPFILETIME gibi),
kullanmanın daha pratik ve bakımı sağlanabilir bir tasarım sağlayacağını görmemiz mümkün.

Windows API fonksiyonlarını inceleyerek, nerdeyse çoğu parametresinin pointer tipinde tanımlanmış olarak görebilirsiniz.