Yazarlar Sözlük Makaleler Yardım Masası Gözlük Forum İstatistik

Tüm Başlıklar XML

1.  Göstericilerle* yapılan işlemlere pointer arithmetic (gösterici aritmetiği) denir.

Göstericiler adres değeri saklar. Bu adres değerleri sonuç olarak sayı türündendir. Dolayısıyla bunların 1 eksiği 1 fazlası gibi işlemler yapılabilmelidir. C'de buna izin verilir. Bu işin şöyle bir püf noktası vardır: T tipinde bir göstericinin değeri 1 arttırıldığında adresin sayısal değeri sizeof(T) kadar arttırılır.
fizikci
21 Ocak 2006 01:47
2.  Her ne kadar göstericiler dizi tipinde olmasa da, C dilinde göstericilerle birlikte [] (köşeli ayraç) operatörü kullanılabilir. Bu kullanım şöyle anlamlandırılır:

int *ptr;
ptr[0] // *(ptr + 0) anlamına gelir (yani ptr adresinde saklanan değer)
ptr[1] // *(ptr + 1) anlamına gelir (yani ptr'den bir sonraki bellek adresinde saklanan değer)
...
ptr[n] // *(ptr + n) anlamına gelir (yani ptr'den n sonraki bellek adresinde saklanan değer)


Yani göstericilerle birlikte kullanılan [] notasyonu sadece bir sözdizimsel şekerdir.
fizikci
21 Ocak 2006 02:10 ~ 20 Mart 2008 12:25
3.  Pointerlar ilk başlarda anlaşılması güç olan konulardan biridir.Hatırlıyorum da ilk C'yi öğrenmeye başladığımda ne kadar da zorlanmıştım pointerlar konusunda.Bu nedenle kod örneği vererek daha iyi anlaşılmasını sağlamak istiyorum.

Öncelikle fizikçinin yazdıklarını ek olarak şunları ifade edebilirim.Pointerlar, C dili için 4 bytelık alan kaplayan ve içinde adres taşıyan verilerdir.Bunlarla ilgili artimetik yaparken akılda kalması gerekenler ise şöye örneklendirilebilir.

Biri int, diğeri de char tipinde iki tane değişken tanımlayalım.
int * intP;
char * charP;

Bunlar ile ilgili aritmetikler şöyle olacktır.(Yukarıda fizikçinin belittiği üzere)
   printf("ilk intP degeri = %p\n", intP);
   intP++;
   printf("1 arttirilan intP degeri = %p\n", intP);
   printf("ilk charP değeri = %p\n", charP);
   charP++;
   printf("1 arttirilan charP degeri = %p\n", charP);

Çıktıya bakmak daha iyi olacaktır:
   ilk intP degeri = 00000001
   1 arttirilan intP degeri = 00000005
   ilk charP degeri = 00000100
   1 arttirilan charP degeri = 00000101

Dikkat edilirse int olan 4, char olan 1 artmıştır.Bunun nedeni ise
   printf("int boyutu = %d\n", sizeof(int)) ;
   printf("char boyutu = %d\n", sizeof(char)) ;

Hemen çıktısını alalım:
   int boyutu = 4
   char boyutu = 1

Burada unutulmaması gereken, bu değerler, bu pointerların içinde bulunan değerlerdir.Nasıl int a deyip  a'ya 5 değerini atamışsak bu da onun gibi bir durumdur.

Bir de olaya şu açıdan, pointerların adreslerinin ne gösterdiğine bakalım:
   printf("ilk intP adresi = %p\n", &intP);
   intP++;
   printf("1 arttirilan intP adresi = %p\n", &intP );
   printf("ilk charP adresi = %p\n", &charP);
   charP++;
   printf("1 arttirilan charP adresi = %p\n", &charP);

Çıktıyı görmek işimizi kolaylaştıracaktır:
   ilk intP adresi = 0012FF88
   1 arttirilan intP adresi = 0012FF88
   ilk charP adresi = 0012FF84
   1 arttirilan charP adresi = 0012FF84

Dikkat ederseniz, pointerlar üzerinde yapılacak işlemler değişkenin bulunduğu yeri değiştirmemektedir.
Son olarak pointerların herhangi bir tipte tanımlanmalarının boyutlarında herhangi bir değişiklik yapmayacağını belirtelim:
   printf("char * boyutu = %d\n", sizeof(char *)) ;
   printf("int * boyutu = %d\n", sizeof(int *)) ;

Çıktı:
   char * boyutu = 4
   int * boyutu = 4

mennan
21 Ocak 2006 11:50
Bu konuda bildiklerinizi bizlerle paylaşabilirsiniz
Tabi bunun için yazarsanız giriş yapmalı, yazar değilseniz yazar olmalısınız.
© 2005, Bilişim Kulübü. (1078 ms)
Ne yapabilirsin: SubtitleClick ile İngilizceni Geliştir, Çınar Framework ile kod yaz, Eglencelik.org'ta biraz eğlen