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
#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
#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
struct Person p1;
struct Person *ptr = &p1;
ptr____ = 30;
printf("%d\n", ptr->age);
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 |