int main() {

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.

sparkle kiddle

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.

ocanal

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

k

codepad.org

samfisher

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);

ocanal

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

k
1

mobil görünümden çık