Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.
Pointer kullanılarak hazırlanmış bu programda, metnin uzunluğunu bulmaca oynuyoruz!. Oyun şöyle oynanmakta: ben kodların arasına metni yazdım, bilgisayar ise uzunluğu buluyor. Programcılıkta birden fazla çözüm vardır. Bu problemin de bir çok çözümü var.Ancak, “önümüzdeki günlerde bela olmadan önce halletmeliyiz” diye düşünerek program buram buram pointers kokuyor. Kodlar içerisinde her zamanki gibi açık açık anlatmaya çalıştım, soru cevap bolumu de hazırladım. Yazdım da yazdım anlayacağınız. Soru cevap bölümünü sonraki yazılarda da kullanırsam eğer, şizofren olduğumu anlayınız, gerekeni yapınız…
Kod: Kodu kopyalamak için üzerine çift tıklayın!
#include<stdio.h>
#include<conio.h>
int metuz(char *);
main(){
char kar[50];
gets(kar);
printf("Metinin uzunlugu: %d'dir", metuz(kar));
getch();
}
int metuz(char *p){ //fonksiyona dizinin ilk karakterinin adresi geliyor. mesela FC100
char *q=p; //biz bu FC100'u q da sakliyoruz. tabi FC100 adres oldugundan
// normal bir degiskende saklamamiz sacmaliktir. *'li degiskende saklamaliyiz.
while(*q!=NULL) //q'nun tuttugu adresteki deger bos oldukca,
q++; // q'yu bir arttir.(bu iki satir bunu soyluyor)
return q-p; //p'de FC100 saklaniyodu. q arta arta FC120 oldu diyelim
// q-p=20'den o zaman 20 karakterliymis diyo gonderiyo hemen
}
/*
Soru 1:
FC120-FC100=20 yani char-char=integer nasil oluyor ?
Cevap 1:
Simdi bak arkadasim. teknik olarak haklisin. floattan float cikinca char kalmaz, float kalir, evet.
Ama derleyici bunu dusunmus. mesela FC520-FA210 diye sorunca "himm B310 olmali. hadi bunu gondereyim de, ordaki
olasi bi sistem dosyasini veya bilmem ne bilgisinin icine edeyim" dememesi icin bunu hemen integer degere ceviriyor.
Soru 2:
Fonksiyona diziyi gonderdik. bkz: metuz(kar) ifadesi.
Fonksiyon diziyi alirken pointer olarak aldik. bkz:char *p ifadesi. sence de arada bir tutarsizlik yok mu?
Cevap 2:
Hayir arkadasim. tutarsizlik ne arar c'de. metuz(kar) deyince aslinda diziyi gondermiyoruz.evet oyle gozukuyor ama degil.
"kar" dedigimiz yer de koca bir dizi degil, dizinin ilk elemaninin adresi bulunur. fonksiyona onu gondeririz.
Soru 3:
Nasil yani?
Cevap 3:
simdi arkadaisim, bak. orneklerle aciklayayim.
kar ve &kar[0] ayni sey. birini yazma digerini yaz. derleyici zeki bir varlik.anlar o. bazen net konusmak lazim. edebiyat falan, sayisal beyinlerimiz anlamayabilir.
Soru 4:
Babam boyle pasta yapmayi nerden ogrendi?
Cevap 4:
lan yuru git arkadasim..
Soru 5:
iyi be.
Cevap 5:
kizdi ya..
neyse benim aklima baska soru gelmedi. bir kodun daha sonuna geldik. bir sonraki kodda gorusuruz.
*/