typedef struct PERSON {
int sicil;
char ad[15];
char soyad[20];
float brut;
int yas;
int cins;
} PERS;
PERS kisi;
PERS *p;
p=&kisi;
kisi.sicil=1;
strcpy(kisi.ad,"ahmet");
strcpy(kisi.soyad,"veli");
kisi.brut=5000;
kisi.yas=34;
kisi.cins=1;
printf("\n %d %s %s %f %d %d",kisi.sicil, kisi.ad, kisi.soyad, kisi.brut, kisi.yas, kisi.cins);
printf("\n %d %s %s %f %d %d",(*p).sicil, (*p).ad, (*p).soyad, (*p).brut, (*p).yas, (*p).cins);
printf("\n %d %s %s %f %d %d",p->sicil, p->ad, p->soyad, p->brut, p->yas,p->cins);
getch();
şöyle bir algoritmamız var örnek burda üç çıktıda aynı şeyi veriyor zaten son iki pointerın farklı yazım hali peki 1. ile 2 ve 3 ün farkı nedir ya ne diye pointer kullanıyoruz kullansak ne kazanızırız kullanmasak?
2 ile 3 aynı şey aslında. farklı gösterimler.
bu örnek pointer ın kullanımıyla ilgili,pointer ların amacını göstermiyor.
en basitinden bir fonksiyon sadece bir değer/değişken return edebilir. pointer ler sayesinde bu kısıtlamadan kurtuluyoruz.
*p'de bir fiziksel adres yazar. zaten direkt *p'nin printini almaya kalktığında sana bir fiziksel adres döndürür hexadecimal olarak, *p'de tutulan fiziksel adreste belirtilen yerde ne varsa ona ulaşır. sen p'ye bir şey atamaya kalktığında o adrese gidip o istediğin şeyi yazar.
direkt olarak *p'ye bir şey yazmaya kalktığında sadece adres yazabilirsin. ama p-> üzerinden kullanmaya kalktığında o strcut'ın o adresteki node'una yazarsın istediğini, adreslemeyle alakan olmaz. p'yi pers *p değil, kisi'de olduğu gibi pers p olarak tanımlasaydın örneğin p = kişi; desen aynı yapıdaki kisi'yi p'ye kopyalardı.
şimdi diyeceksin ki neden adreslerle uğraşıyorum? öğrencisin herhalde, biraz sabırlı ol, ileride daha karmaşık veri yapılarını gördüğünde neden kullanıldığını anlayacaksın. çünkü c ve c++ kullandığında linked list'lere bir şekilde bulaşacaksın ve bu dallanıp budaklanacak. o linked listler içinde dört bir yana hareket etmek isteyeceksin, bunları bilmeden ve anlamadan da onu yapamazsın.