12.01.2025

1

Like

40

Views

C Dilinde Pointer ve Struct Yapısı

Bilgisayar mühendisliği, yazılım mühendisliği gibi bölümlerde okuyan 1. sınıf öğrencileri için C dilinde öğrenilen pointer ve struct yapıları, özellikle güz dönemi derslerinde ve final sınavlarında karşınıza çıkabilecek önemli konulardır. Bu yazıda, pointer ve struct yapılarının temellerini ve nasıl kullanılacaklarını açıklayarak, C dilindeki bu kritik konularda yardımcı olmayı amaçlıyorum.
Pointer Nedir?

Pointerlar, C dilinde oldukça önemli ve kullanışlı bir konudur. Kısacası, pointerlar bir veri değişkeninin bellekteki adresini tutan göstericilerdir. Yani, bir değişkenin değerini değil, o değişkenin bellek adresini saklarlar.

Pointer Nasıl Tanımlanır?

Pointerlar, * sembolüyle tanımlanır. Bir pointer'ı kullanmadan önce, genellikle NULL değeri atanarak, güvenli bir şekilde başlatılır. Ayrıca, pointer'ların tipi, adresini saklayacağı değişkenin veri tipiyle uyumlu olmalıdır.

Örnek olarak:

c
Kodu kopyalaint *ptr = NULL; // veya int *ptr = 0;

Burada ptr adında bir integer pointer'ı tanımladık ve başlangıçta NULL değeri atadık. Bu pointer, ilerleyen zamanlarda bir integer değişkeninin adresini saklayacak.

Pointer'a Değer Atama

Pointer'ı kullanabilmek için bir değişkenin adresini saklamamız gerekiyor. Bunu yaparken, değişkenin adresini almak için & sembolünü kullanıyoruz. Mesela:

c
Kodu kopyalaint jesus = 67;
ptr = &jesus; // ptr, jesus değişkeninin adresini tutuyor

Pointer ve Değer Yazdırma

Pointer ve adres değerlerini yazdırmanın birkaç yolu var. Birincisi, pointer'ın sakladığı adresi görmek:

c
Kodu kopyalaprintf("ptr pointerinin adresi: %p\n", ptr);
printf("jesus değişkeninin adresi: %p\n", &jesus);

Burada %p formatı, pointer'ın tuttuğu adresi yazdırmamızı sağlar.

İkinci seçenek ise, pointer'ın gösterdiği değeri almak. Yani, pointer'ı dereference ederek, o adresin içeriğini yazdırmak için * sembolünü kullanıyoruz:

c
Kodu kopyalaprintf("ptr pointerinin değeri: %d\n", *ptr);
printf("jesus değişkeninin değeri: %d\n", jesus);

Burada *ptr, ptr pointer'ının işaret ettiği adresin içindeki değeri verir.

Pointer ve Diziler

C dilinde diziler zaten bellek adreslerini tutar. Yani, bir dizi tanımladığınızda, dizinin adı aslında dizinin ilk elemanının adresini gösterir. Bu yüzden pointerlar ve diziler çok sık birlikte kullanılır.

Örnek:

c
Kodu kopyalachar dizi[] = {'a', 'b', 'c', 'd', 'v', 'f'};
char *dizipointi = dizi; // dizi zaten bir pointer'dır

Bu şekilde diziyi pointer ile eşleştirdik. Eğer dizinin elemanlarını yazdırmak istersek:

c
Kodu kopyalafor (int i = 0; i < 6; ++i) {
printf("%c\n", *(dizipointi + i));
}

Bu kodda dizipointi + i, pointer'ı birer birer ilerletir ve her bir dizinin elemanını sırayla yazdırır.

Struct Nedir?

Struct yapısı, birden fazla farklı veri tipini tek bir yapı altında birleştirmemize olanak sağlar. Yani, farklı türdeki verileri gruplayarak, tek bir birim olarak işlem yapmamıza olanak tanır. C dilinde bir struct, genellikle daha büyük ve karmaşık veri yapıları oluşturmak için kullanılır.

Struct Tanımlamak

Bir struct tanımlamak için önce struct anahtar kelimesini kullanırız. Ardından, hangi verileri içereceğini belirleriz. Örnek bir struct tanımı:

c
Kodu kopyalastruct nunumi {
char mert;
char* name;
char* lastname;
int yas;
float scor;
};

Burada nunumi adında bir struct oluşturduk ve içinde bir char, iki char* (string) ve bir int ile float türünde veriler tanımladık.

Neden Pointer Kullanıyoruz?

Struct'larda string (yazı) verileri tanımlamak için diziler veya pointerlar kullanılabilir. Dizilerle uğraşmak bazen zahmetli olabilir çünkü karakter sayısını önceden belirlemeniz gerekir ve bu, esneklik açısından sınırlayıcı olabilir. Pointer kullanmak ise, belleği daha verimli kullanmamıza ve daha esnek bir yapı oluşturabilmemize olanak tanır.

Main Fonksiyonu İçinde Struct Kullanımı

Artık struct'ı tanımladık ve bir değişken oluşturduk. Struct'ı kullanmak için o struct türünde bir değişken tanımlarız. Örneğin:

c
Kodu kopyalastruct nunumi isa;

Bu kodda, isa adında bir nunumi türünde değişken oluşturduk. Şimdi, isa değişkenine değerler atayabiliriz. Bunun için iki yöntemimiz var.

  1. Uzun Yöntem:
c
Kodu kopyalaisa.mert = 'a';
isa.name = "Nurseli";
isa.lastname = "Demir";
isa.yas = 21;
isa.scor = 100;
  1. Kolay Yöntem:
c
Kodu kopyalastruct nunumi isa = {'a', "Nurseli", "Demir", 21, 100};

Struct Değerlerini Yazdırmak

Struct verilerini yazdırmanın en kolay yolu, her bir öğe için printf fonksiyonu kullanmaktır:

c
Kodu kopyalaprintf("Baş harf: %c\n", isa.mert);
printf("İsim: %s\n", isa.name);
printf("Soyisim: %s\n", isa.lastname);
printf("Yaş: %d\n", isa.yas);
printf("Skor: %f\n", isa.scor);

Kullanıcıdan Girdi Alma

Struct içinde tanımlı olan verilere kullanıcıdan input almak için scanf kullanabiliriz. Örneğin:

c
Kodu kopyalascanf("%d", &isa.yas);

Burada isa.yas'a kullanıcıdan değer alıyoruz.

typedef ile Struct Kullanımı

typedef, bir türü başka bir isimle tanımlamamıza olanak tanır. Özellikle struct'larda, bu türler için daha kısa ve okunabilir isimler oluşturmak için kullanılır.

Örnek:

c
Kodu kopyalatypedef struct {
char *name;
int age;
} Person;

Burada Person adında bir tür oluşturduk. Artık, Person türünde değişkenler tanımlayabiliriz, ancak struct anahtar kelimesini tekrar yazmamıza gerek kalmaz.

typedef Kullanımının Avantajları

typedef, struct türlerini kullanmayı daha pratik hale getirir. Kod yazarken struct kelimesi yerine sadece türün ismini kullanabilirsiniz. Bu, kodu daha temiz ve anlaşılır yapar.

Örnek:

c
Kodu kopyalaPerson person1;
person1.name = "Ali";
person1.age = 25;

Burada, Person türündeki person1 adında bir değişken oluşturduk ve değer atadık.

Comments

You need to log in to be able to comment!

İsa Ergişi

I am Isa. In 2023, I started the Computer Engineering program at Pamukkale University. I am currently a second-year student dedicated to Cybersecurity. I aim to fully develop my skills and specialize in this field. I perform my tasks using Kali Linux. I have a solid foundation in programming languages such as C, Python, ,Java and Ruby; I am proficient in using Windows, MacOS, and Linux operating systems.

Location

Ankara, TR

Education

Bilgisayar Mühendisliği - pamukkale üniversitesi

© 2021 Patika Dev

facebook
twitter
instagram
youtube
linkedin

Disclaimer: The information /programs / events provided on https://patika.dev and https://risein.com are strictly for upskilling and networking purposes related to the technical infrastructure of blockchain platforms. We do not provide financial or investment advice and do not make any representations regarding the value, profitability, or future price of any blockchain or cryptocurrency. Users are encouraged to conduct their own research and consult with licensed financial professionals before engaging in any investment activities. https://patika.dev and https://risein.com disclaim any responsibility for financial decisions made by users based on information provided here.