Python ctypes Notlarım – 4

Merhaba arkadaşlar önceki yazımda ctypes ‘da dizileri (array) incelemiştik. Bu yazımda ise pointer (işaretçi, gösterge, gösterici) kullanımına göz atacağız.

Öncelikle pointer hakkında bir bilginiz yoksa burayı incelemenizi öneriyorum, aksi takdirde bu yazıdan pek bir şey kazanamayabilirsiniz.

Python ctypes ile çalışırken iki farklı pointer fonksiyonunun olduğunu bilmeli ve bu iki pointer fonksiyonunun kullanım alanları arasında ufak bir fark olduğunu, kullanım amaçlarınıza göre seçmeniz gerektiğinizi iyi anlamanız gerekmektedir.

İki ctypes pointer fonksiyonu arasındaki farkı örnek kodlara başlamadan önce kısaca özetlemek gerekirse;

  • pointer()  Fonksiyonu pointer oluşturmak ve ilk oluşturulan pointer türleri için geçerlidir.
  • POINTER() Fonksiyonu ise herhangi bir ctypes türünü pointer olarak görür ve yeni bir tür olarak kabul eder.

Python

Çıktı

Önce 35 sayısını c_int türünde i değişkenimize atadık, ardından ptr_i işaretçisine i değişkenini atadık. ptr_i ‘yi yazdırmak istediğimizde bunun bir obje olduğunu ve bellekte tuttuğu adresi bize bildirdi. Pointer’ın içeriğine erişmek için ise contents parametresini kullandık. Bu parametre pointer’ın tuttuğu nesneyi bize geri döndürüyor.

 

Pointer’ın sakladığı değeri değiştirmek için iki farklı yol. İlki, contents parametresini kullanarak atama işlemi gerçekleştirmek,

bir diğeri ise pointer değişkeninin diziye erişir gibi ilk elemanına atama yapmak. pointer() fonksiyonu değerin özünü 0. indiste tutar.

Bu demek olmuyor ki, diğer indislere de erişim sağlanamaz. Eğer gerçekten ne yaptığınızı biliyorsanız; diğer indislere erişebilir bellek bloklarını değiştirebilirsiniz. Genelde pointer tanımlandığında sadece değer katmanı üzerine erişim sağlanarak işlem yapılır.

Ek olarak da diğer POINTER() fonksiyonunun kullanımına göz atalım,

Python

Çıktı

Gördüğünüz üzere atama yaptığımız değişkeni nesne gibi kullanabiliyoruz. Yalnız burada dikkat etmemiz gereken nokta nesne olarak kullandığımız pointer’ın başlangıçta hangi veri tipi ile oluşturulduğu ve tekrar pointer oluştururken o veri tipi ile işlem yapmamız gerektiğidir (son satır).

 

Son olarak C’de NULL, Python’da False olarak geçen boş bir pointer oluşturalım.

Ekrana False yazacaktır.

Leave a Reply

Your email address will not be published. Required fields are marked *