[]
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.
#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.
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.
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