CodeBlanks Logo Icon CodeBlanks

Struct ve işaretçi

  • C kursu
  • Orta seviye
  • Ders 30/116
  • 5 dk

Struct işaretçisi ve -> operatörünü öğrenirsin.

Struct ve işaretçi

Bir struct'a işaretçi tutmak, büyük veriyi kopyalamadan geçirmenin temel yoludur. Önce struct Person { char name[32]; int age; } tanımlarsın. Sonra struct Person p1; ile bir değişken, struct Person *ptr = &p1; ile de işaretçi oluşturursun.

İşaretçi üzerinden alana erişmek için ok operatörü -> kullanılır: ptr->age = 30;. Bu, (*ptr).age yazımının kısaltmasıdır. Parantez şarttır; *ptr.age yanlış yorumlanır. Ok operatörü hem kısadır hem de niyeti açıkça gösterir; bu yüzden C kodunda yaygındır.

-> ve (*ptr).field eşdeğerdir

Ok operatörü ->, aslında * dolaylaması ve . erişiminin birleşimidir. Yani ptr->age ile (*ptr).age tamamen aynıdır.

Örnek: struct Person p1 = {"Ayşe", 25}; ve struct Person *ptr = &p1; tanımladın. Hem ptr->age hem (*ptr).age 25 verir. Parantezler olmadan *ptr.age yazarsan bu, *(ptr.age) olarak yorumlanır; bu da derleme hatası ya da tanımsız davranıştır. Modern C'de ok operatörü tercih edilir; daha okunaklıdır.

Uygulama İşaretçi ile alan ata ve yazdır

struct Person tanımla: char name[32]; ve int age;. main içinde struct Person p1; ve struct Person *ptr = &p1; yaz. ptr->age = 30; ile ata ve printf("%d\n", ptr->age); ile yazdır.

Başlangıç kodu

main.c
#include <stdio.h>

// struct Person tanımla (name[32] ve age)
// p1 değişkenini ve ptr işaretçisini tanımla
// ptr üzerinden age'i 30 yap ve yazdır

int main(void) {
    return 0;
}

Örnek çözüm

main.c
#include <stdio.h>

struct Person {
    char name[32];
    int age;
};

int main(void) {
    struct Person p1;
    struct Person *ptr = &p1;
    ptr->age = 30;
    printf("%d\n", ptr->age);
    return 0;
}

Beklenen çıktı

30

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 ptr işaretçisi üzerinden age alanına nasıl erişilir?

  • &ptr.age
  • ptr.age
  • *ptr.age
  • ptr->age Doğru cevap

Açıklama: -> operatörü işaretçi üzerinden alan erişimi sağlar.

2 İşaretçi üzerinden alan ata

Soru
struct Person p1;
struct Person *ptr = &p1;
ptr____ = 30;
printf("%d\n", ptr->age);
Cevap
struct Person p1;
struct Person *ptr = &p1;
ptr->age = 30;
printf("%d\n", ptr->age);

Açıklama: ->age, ptr işaretçisi üzerinden age alanına erişir.

3 Erişim biçimlerini eşle

Kavram Anlamı
ptr->age İşaretçi erişimi
(*ptr).age Dolaylı erişim
p1.age Değer erişimi
&p1 Adres alma

Orta seviye bölümündeki tüm dersler