int *p,a[5]={10,20,30,40,50};
p=a;
printf("%d\n",++*p);
printf("%d\n",++*p++);
printf("%d\n",*p);
printf("%d\n",*p--);
printf("%d\n",--*p++);
printf("%d\n",(*p)--);
printf("%d\n",*p++);
printf("%d %d\n",--++--*p--,*p);
printf("%d\n",*p);
printf("%d\n",--*p,*p);
getch();
}
kısaca açıklayabilir misiniz , çıktıyı bulurken sorun yaşıyorum.

eğer buraya yazan olmazsa diye diyoru işlem önceliği bir siteden kolayca bulabilirsiniz bence. temel bir alıştırma bu. ++ sağda olunca solunda olunca öncelik nedir. pointer int olunca ne kadar artar double olunca ne kadar artar. pointer arttırılınca (tuttuğu adres yani) nasıl etkilenir falan. umarım biri yazar o daha iyi olur tebi.


sanırım takıldığınız yer 2. aşama,
++*p -> pointer için böyle kullanılınca doğrudan pointerin işaret ettiği sayıya işlem yapıyor.
yani,
*p = 10
*p = *p + 1
yapıyor.
fakat ++ pointerdan sonra kullanılırsa(*p++) işaret ettiği sayıyı değil pointer değerini değiştiriyor.
yani
*p = 10 ise
*p++ = 20 oluyor.
gerisini zaten bu mantıkla incelerseniz anlayacaksınızdır.
mesela eğer ++'ın doğrudan işaret ettiği sayıyı etkilemesini istiyorsanız parantez kullanmalısınız.
*p = 10 ise
(*p)++ = 11 olacaktır.


teşekkür ederim aslında anlayamadığım yer 4. printf'in çıktısı 20 iken 5. printf'in çiktisi 11 in nasıl olduğu


o zaman adım adım gidelim,
//şu anda pointer '10' u işaret ediyor.
1- printf("%d\n",++*p);
// burada pre increment var başta yazdığım gibi işaret ettiği sayıyı etkileyer, artık 10 = 10 + 1 oldu.
sonuc:
a[5]={11,20,30,40,50};
*p = 11
çıktı: 11
________________________
2- printf("%d\n",++*p++);
//burada hem pre hem de post increment var. pre increment pointer'in işaret ettiği sayıya etki ediyor, post increament ise doğrudan pointer'a etki ediyor.
pre increment
*p = *p + 1
11 = 11 + 1
post increment
p = p + 1
sonuc:
a[5]={12,20,30,40,50};
çıktı: 12
*p = 20 //printf sonrası
________________________
3- printf("%d\n",*p);
*p = 20 zaten değişen bir şey yok.
sonuc:
a[5]={12,20,30,40,50};
çıktı: 20
*p = 20 //printf sonrası
________________________
4- printf("%d\n",*p--);
//post increment var adres printf sonrası bir geriye gidiyor.
sonuc:
a[5]={12,20,30,40,50};
çıktı: 20
*p = 12 //printf sonrası
________________________
5- printf("%d\n",--*p++);
//pre increment ile önce pointerin işaret ettiği sayı azalıyor, printf sonrasi ise post increment ile adres bir artıyor.
pre-increment
--*p
*p = *p-1
12 = 12-1
post-increment
*p++
p = p+1
sonuc:
a[5]={11,20,30,40,50};
çıktı: 11
*p = 30 //printf sonrası
printf("%d\n",(*p)--);
printf("%d\n",*p++);
printf("%d d\n",--++--*p--,*p);
printf("%d\n",*p);
printf("%d\n",--*p,*p);


Çok teşekkür ederim , post-increment'te sorunum varmış ; şimdi anlamış oldum:)
