Giriş
(6)

C programlama pointer sorusu ?

k
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 mi
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.
0
k
(13.12.12)
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.
0
sparkle kiddle
(13.12.12)
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.
0
ocanal
(13.12.12)
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
0
🌸k
(13.12.12)
samfisher
(13.12.12)
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);
0
ocanal
(13.12.12)
Çok teşekkür ederim , post-increment'te sorunum varmış ; şimdi anlamış oldum:)
0
🌸k
(13.12.12)
buraya yazılanların hakları Sir Anthony Hopkins'e aittir.
yazan eden compumaster, ilgilenen eden fader
modere edenler basond, compumaster, fraise, kibritsuyu, rakicandir
bu sitede yazılanların hiçbiri doğru değildir. site içeriği küçükler için sakıncalı olabilir. yazılardan yazarları sorumludur. kaynak göstermeden alıntılanamaz. devlet tarafından atanmış bir kurumun internet üzerinde kimin hangi bilgiye ulaşıp ulaşamayacağına karar vermesi insan haklarına aykırıdır. web siteleri kullanıcıların istekleri doğrultusunda bağlandıkları yerlerdir. kullanıcılar isterlerse bir web sitesine bağlanmayabilirler. bu güçleri ve imkanları mevcuttur. bir kullanıcı bir siteye bağlanmak istiyorsa bu onun tercihi ve hakkıdır. bağlanmak istemiyorsa bu yine onun tercihi ve hakkıdır. halkın kendisine hizmet etmesi için görevlendirdiği kurumlar hadlerini aşıp halka neye ulaşıp ulaşmayacağını bilmeyen cahil cühela muamelesi edemezler. ebeveynlerin çocuklarını sakıncalı içeriklerden koruması için çok sayıda bedava ve ücretli yazılım mevcuttur. bu yazılımlar bir web tarayıcısını kullanmaktan daha karmaşık teknik bilgi gerektirmemektedir. devletin milletini küçük düşürmesi ve ebleh yerine koyması yasaktır.