[]

C Sorusu

Merhaba. C dersinde dizi ve pointer ilişkisine çalışıyordum da şimdi elimde şöyle bir ders notu var :

#include<stdio.h>
int main( void )
{
int elm;
int month[ 12 ];
int *ptr;
ptr = month; // month[0] adresini atar
elm = ptr[ 3 ]; // elm = month[ 3 ] değerini atar
ptr = month + 3; // month[ 3 ] adresini atar
ptr = &month[ 3 ]; // month[ 3 ] adresini atar
elm = ( ptr+2 )[ 2 ]; // elm = ptr[ 4 ] ( = month[ 7 ] )değeri atanır.
elm = *( month + 3 );
ptr = month;
elm = *( ptr + 2 ); // elm = month[ 3 ] değerini atar
elm = *( month + 1 ); // elm = month[ 1 ] değerini atar

return 0;
}

anlamadığım nokta,

elm = *( ptr + 2 ); // elm = month[ 3 ] değerini atar

kısmının doğru olup olmadığı. yani önceki notlarda:

ptr=dizi olduğu zaman dizi[3]=*(ptr+3) şeklinde gösterilmişti. ama burada 3 yerine yanlışlıkla 2 mi yazılmış yoksa kaçırdığım bir nokta mı var?

bir diğer sorum da

elm = ( ptr+2 )[ 2 ]; // elm = ptr[ 4 ] ( = month[ 7 ] )değeri atanır.

kısmını anlamadım. bellek adresini kullanarak açıklayan olursa sevirim.

 
ilk kisimda yanlislik var galiba, 3 yerine iki yazilmis.

elm = (ptr+2)[2];

kisminda ise (ptr+2) arrayin baslangici olarak kullanilmis ve ona da [2] indisi verilerek ptr[4] elemanina erisilmis.
ptr'ye de bir onceki satirda month[3] degeri atandigi icin ptr[4], month[7]'ye denk geliyor.
  • nawres  (28.08.09 22:57:41) 
elm = *( ptr + 2 ); // elm = month[ 2 ] değerini atar
veya
elm = *( ptr + 3 ); // elm = month[ 3 ] değerini atar
bu ikisnden biri..

elm = ( ptr+2 )[ 2 ]; // elm = ptr[ 4 ] ( = month[ 7 ] )değeri atanır.
burada köşeli parantezin içindeki değer [ 2 ], ( ptr+2 ) ye ekleniyor. mesela
ptr[ 4 ]' ü şu şekillerde de yazabilirsin:
(prt+1) [3]
(prt+2) [2]
(prt+3) [1] gibi.. parantezin içindeki adres 0. eleman olarak kabul edilir ve üzerine köşeli parantezin içindeki sayı eklenir.

( = month[ 7 ] )' ye gelirsek bi üst satırda
ptr = &month[ 3 ]; olarak tanımlandığı için
prt yerine (month+3) yazarsan
ptr[ 4 ] = (month+3)[4] = month[ 7 ] olur.
  • kifayetsiz pluton  (28.08.09 23:02:42 ~ 23:04:37) 
1
buraya yazılanların hakları Sir Anthony Hopkins'e aittir.
yazan eden compumaster, ilgilenen eden fader
modere edenler angelus, Artibir, aychovsky, baba jo, basond, compumaster, deckard, duyulmasi gerektigi kadar, fader, fraise, groove salad, kahvegibi, kaymaktutmayansicaksut, kibritsuyu, monstro, pandispanya, robin, ron dennis
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. Skimlinks ile linkler üzerinden yönlendirme payı alınmaktadır.