C programlama; Typedef, Struct, Pointer

Gömülü sistemlerde projelerine başlamadan önce C programlama da özellikle struct, typedef, pointerlar konusunun özellikle benimsenmesi gerekmektedir. Bu yazıda struct, typedef ve pointer konusudan bahsedeceğiz. Ayriyetten fonksiyon göstericileri konusunu ele alacağız.

Konu boyunca gerçeklemesi yapılan kodu derlemek istediğiniz de online C compiler kullanmanız yeterli olacaktır.

1-)Typedef

İlk ele alacağımız kısım “typedef” kelimesidir. “typedef”  kelimesini kullandığımızda, “struct”  için yeni değişken tanımlarken struct ifadesini tekrardan kullanma ihtiyacı duymayız.Aşağıdaki iki kod bu duruma örnektir.

Yukarıda tanımlı yapımızın özelliklerine sahip değişken tanımladığımız da “struct” kelimesini kullanma ihtiyacı duyduk.

Ama eğer “typedef” kelimesini kullandığımız zaman böyle bir ihtiyaca gereksinim kalmayacaktır. Aşağıdaki kod bloğu buna örnektir.

2-)Pointerlar

Nesnellerin adres bilgilerin bellekte tutulduğu değişkenlere pointer denir. 

Pointlerların kullanım amacı;

  • Call by reference
  • Dizileri fonksiyonlara aktarmanın tek yollu
  • Bir fonksiyon birden fazla değer döndüremez. Pointerlar sayesinde birden fazla değer aktarmak mümkündür.
  • Fazla yer kaplayan türler için, pointer parametre olmayan fonksiyonlara argüman geçmek maliyetli ve yavaş işlem olduğundan, pointer parametre kullanılarak maliyet ve perfonmans artışı sağlanabilir.
  • Belleğe doğrudan erişim.

(*) Indirection Operant

Pointer’ın işaret ettiğine erişmek için (* ) indirection operantı kullanılır.

(&) operatörü

& operatörü, değişkenin adresini üretmek için kullanılmaktadır. 

Indirection operant (*) ve  & operatörü ile ilgili örnek kod örneği aşağıdaki gibidir.

Pointer Casting

Bir pointer’ın işaret ettiğin türünü, başka türe çevireceğiz zaman casting kullanılmaktadır. Aşağıda casting işleminin yapıldığı kod örneği bulunmaktadır.

Call by Value

Lokal değişkenler, sadece tanımlanmış olduğu fonksiyonlar içerisinde geçerlidir ve bu tanımlandığı fonksiyonlarda kullanılmaktadır.  Bir fonksiyon programda çağırıldığında , çağrılan fonksiyon içindeki lokal değişkenler oluşturur ve fonksiyon tamamlandığında ise bu lokal değişkenler yok yok edilir. Call by value metodu ile bunu görmekteyiz. 

Call by Reference

Fonsiyonlara değer kendisi yerine, o değerin adresi gönderilirse buna call-by-reference denir. Bu durumdan dolayı fonksiyonda yapılan değişiklik gerçek değerde değişime sebep olacaktır.

3-)Yapının birimlerine pointerlarla erişme

“Pointer”, “struct”ların üyesi olabilir. Aşağıdaki “struct” iki üyeden oluşmaktadır. (->) arrow operatörü ile (.) nokta operatörüyle yapı içerisindeki üyelere erişilebilir.

Aşağıdaki kod bloğu ile yapı içerisideki üyeye değer atılmaktadır.

 

4-) Struct’ların Fonksiyonlarda Kullanımı

C programlama da Struct’lar da argüman olarak kullanılabilir.Struct’ların fonksiyonlar da kullanımına ait kod blogu yukarıdaki tanımı yapılan kod blogları birlikte aşağıda verilmiştir.Fonksiyon değer döndürmeli olarak kullanılmıştır.

Komple kodun derlenmesi sonucu oluşan program çıktısı aşağıdaki gibidir.

5-) Fonksiyon Pointer’lar (Fonksiyon Göstericileri)

Her fonksiyonunda bir adresi bulunmaktadır. Fonksiyon Göstericileri,fonksiyonun adresini saklamak için kullanılmaktadır. Yukarıdaki örnekler de pointer’lar değişkenler  (variable) adresini saklamak için kullanıldı.

Aşağıdaki örnekte int tipinde parametre alan fonksiyon göstericisi tanımlanmıştır.sonra fonksiyonun toplama ve baski fonksiyonlarının adresi &ampresan operatörüyle ptr ve p isimli fonksiyon göstericilerine atılmıştır.

Fonksiyon pointer gösterimi void (*pointer adı)(parametre tipi); şeklinde olur.

Call-by-Reference için kullanılan fonksiyonun, fonksiyon pointer ile çağrılması aağıdaki kod parçasındaki gibidir.

 

Bu yazı hakkında ne düşünüyorsun ?
  • Faydalı 
  • Gereksiz 
  • Normal 
  • Müthiş 
Sidar ATABEY

About Sidar ATABEY

Elektrik-Elektronik Mühendisi. Makine Mühendisliğinde yan dal programını tamamladı. 1 sene boyunca Erasmus Programı kapsamında Polonya Silesian University of Technology'de eğitim gördü.

View all posts by Sidar ATABEY →