POINTER VE ARİTMETİK
Posted by admin on May 19, 2008
POINTER VE ARİTMETİK
Her cesit islemler, pointer’lar ile mumkun degildir. Pointer bir adres oldugundan, ona bir sabit rakam ekleyip, daha ilerideki bir adrese erismek mumkundur. Ayni sekilde, pointer’in adresinde bir rakam cikartip, daha onceki hafiza bolgelerine erismek mumkundur. Iki pointer’i toplamak pek mantikli degildir, cunku bilgisayardaki adresler sabit degildir. Cikacak rakamin tuhaf olacagi icin pointer ile carpma da yapilamaz. Ne yaptiginizi dusunurseniz, yapabilecekleriniz ve yapamayacaklariniz kendini belli edecektir.
TAMSAYI POINTER
“list” isimli tamsayi dizisine, 100 den 199 a kadar degerler verilir. Daha sonra, 28. elemanin adresini, “pt” isimli pointer’a atiyoruz. Daha sonra ekrana yazdigimizda, gercektende, o degeri aldigini goruyoruz.
Daha onceki konularda, bir fonksiyondan veri degerlerini dondurmek icin iki metod oldugunu soylemistim. Ilki, bir dizi kullanarakti. Ikincisini herhalde tahmin edersiniz. Sayet tahmininiz “pointer sayesinde” idiyse,tebrikler.
Burada, iki tane tamsayi degiskeni (pointer degil) tanimliyoruz: “cevizler” ve “elmalar”. Once bunlara birer deger atiyoruz, ve “degistir” isimli fonksiyonu cagiriyoruz. Cagirirken, “cevizler” in degeri (100), ve “elmalar” degiskeninin adresini geciriyoruz. Fakat, fonksiyona da, bir deger ve bir adres gelecegini haber vermemiz gereklidir. Bunun icin, fonksiyonun parametreleri tanimlanirken, bir adres tasiyacak olan sembolun basina bir yildiz koymamiz yeterlidir.
Fonksiyonun icinde, bu iki degeri degistirip, eski ve yeni degerleri ekrana yaziyoruz. Bu program calistiginda, ana programdaki “cevizler” in degerinin ayni kaldigini fakat “elmalar” in yeni degerlerini aldigini goreceksiniz.
main() { int cevizler,elmalar; cevizler = 100; elmalar = 101; printf(“Baslangic degerleri %d %d\n”,cevizler,elmalar); /* “degistir” i cagirinca, */ degistir(cevizler,&elmalar); /* cevizlerin DEGERI ve, */ /* elmalarin adresini geciriyoruz */ printf(“Bitis degerleri ise, %d %d dir..\n”,cevizler,elmalar); } degistir(kuru_yemis,meyvalar) /* kuru_yemis tamsayidir */ int kuru_yemis,*meyvalar; /* meyvalar bir tamsayi pointer’idir */ { printf(“Degerler %d %d\n”,kuru_yemis,*meyvalar); kuru_yemis = 135; *meyvalar = 172; printf(“Sonraki degerler %d %d\n”,kuru_yemis,*meyvalar); }
“cevizler” in degerinin ayni kalmasinin nedeni, fonksiyona bir deger gecirildiginde, C dilinin o degerin bir kopyasini fonksiyona gecirmesi yuzundendir. Programa geri dondugunuzde, degerin bir kopyasini kullandigimiz icin asil degerin degismedigini goreceksiniz.
“elmalar” in degerinin degismesi ise, yine fonksiyona “elmalar” degiskeninin adresinin bir kopyasi gecirildigi halde, bu adres ana programdaki “elmalar” a karsilik geldigi icin, fonksiyonda bu adresteki degeri degistirir degistirmez, “elmalar” in da degeri degismis olur.
hey i posted a question some time back pertaining to exactly how to speed up my twilight eclipse site’s load time since we employed the same theme back then and somebody placed a remark answering it on my website weeks ago - if that was you I simply wanted to say many thanks, and if it wasn’t you then i’m sorry to take the time you, but cheers anyhow!