İTÜ Özgür Yazılım Kulübü Soru&Cavap sitesine hoş geldiniz.

Pointer'larlan oynamak

0 oy

Uzun zamandır pointerlar ile içli dışlı olacak bir C kodu yazmamışım. Biraz kurcalarken kendimi kaybettim. ++ ile * ı birlikte kullanırken öncelik neye göre veriliyor? Buraya göre benim anladığım bu arkadaşların önceliği eşitmiş sanırım. Yani bir string pointerı üzerinde while(*strPtr++) olarak işlem yaparsam ilk elemanı asla elde edemez miyim?

Koda ve çıktısına burdan ulaşabilirsiniz:

http://ideone.com/eD3dDQ

3, Ağustos, 2014 Özgür Yazılımlar kategorisinde Güray (200 puan) tarafından soruldu

1 cevap

0 oy
Örnek kodla açıklamaya çalışayım:
 
int main()
{
int *numptr = new int[2]; // 2 adet int alanı al.
int num; // 1 tane int degisken
 
numptr[0] = 12; // 2 adet yere 2 tane sayi koy.
numptr[1] = 24;
 
num = *numptr++; // soruda bahsedilen islemi yap.
 
cout << "*numptr: " << *numptr << ", num: " << num << endl;
/* ekrana numptr nin son halinin hangi sayiyi gosterdigini ve num degiskenine hangi sayinin atanmis oldugunu gormek için gereken seyleri yazdir.*/
 
return 0;
}
 
ekrana basılan sonuç:
 
*numptr: 24, num: 12
 
Yani kısaca önce *numptr değerini "num" değişkenine atar. sonra numptr değerini bir artirarak sonraki elemanı gösterecek şekile sokmuş olur.
 
Ancak bunun gibi nasıl davranacağı belli olmayan kod yazmak kötü bir alışkanlıktır. Her zaman daha sonra o koda başkasının bakmak zorunda kalacağı hesaplanarak kod yazmalıyız.
 
yani:
 
num = *numptr;
numptr++;
 
şeklinde kullanmak daha iyi olacaktır.
4, Ağustos, 2014 Halil İbrahim (140 puan) tarafından cevaplandı
kodta "this sucks" yazdığım yer hala karmaşık. Onun dışında da dediğin gibi imiş. Bildiğin yeniden öğrendim:) Attığım kodun çözümü de bu mantıklan: http://ideone.com/wSAWWX
ideone linki yine boş çıktı :) sıkıntı mı var ki sitede yoksa sadece ben mi göremiyorum?
Şimdi kontrol ettim başka tarayıcıdan,. Siteye giriş yapmış olmak gerekiyormuş, ideone.com üyeliği istiyor kısacası:(
...