1. İşaretçilere Giriş
İşaretçiler (Pointers) ve bundan önce görmüş
olduğumuz diziler (Arrays) ilerde yapacağımız uygulamalarda
kullanımına kesin ihtiyaç duyacağımız başlıklardır. Bunlar bize
dinamik bellek kullanımını sağlarlar. Dinamik bellek kullanımından
bahsedecek olursak, belleğimizin kutucuklardan oluştuğunu hayal
edin. 100 kutucuklu bir belleğimiz var. Bu kutucukların her
birinin bir adresi vardır ve biz de bu adresler yolu ile
kutucuklara erişiriz. İşte işaretçiler bu erişimi sağlıyor. Bu
konuya çalışırken, anlamanın gayet kolay olduğunu göreceksiniz.
Fakat ben sizi uyarayım, en kolay konular en çok hata
yapılanlardır. İşaretçilerde yapılan hatalar programın hatta
sistemin çökmesine sebep olabilir, aynı zamanda yapılan hataları
kolay kolay bulamayabilirsiniz. Büyük projelerde bu sizi bayağı
sıkıntıya sokacaktır. Onun için işaretçiler konusunda, kullanım
tekniği hakkında size sık sık tavsiyelerde bulunacağım.
İşaretçilerin Tanımlanması ve Değer Atanması
Bir işaretçi tipi, hangi tipe işaret
ettiğini belirten ve birer adres değeri içeren verilere sahiptir.
Bir işaretçi değişken bildirimi, açık olarak hangi tip veriyi
kullanacağını bildirerek başlar. Derleyicimizde
* işareti ile
işaretçi değişkeni tanımladığımızı anlar.
<tip> *<işaretçi adı>; Şeklinde
yazılır. Örneğin, int *İsaretciAdi;
Şimdi de aynı satırda birden fazla işaretçi
tanımlayalım.
İnt *is1, *is2, *is3;
Şeklinde tanımlayabiliriz. Benim size
tavsiye ettiğim budur. Fakat farklı bir yol olarak da
(İnt *) is1, is2, is3;
şeklinde de yazılabiliriz. Burda dikkat etmemiz gereken olay ise,
int tipinde işaretçileri tanımlarken herhangi bir değişkende
tanımlarsak (int *) şeklinde tek satırda yapmamız hatalıdır.
(İnt *) is1, is2, is3, x=4; //hata
int *is1, *is2, *is3, x=4; //doğru
Sanırım ne demek istediğimi anladınız:).
Daha önce görmüş olduğumuz "&"
adres operatörünü hatırlayalım, kendisisinden sonra gelen ifadenin
adresini gösterir.
İnt x;
İnt *is1=&x;
x i tanımladık, sonra is1 işaretimize x in
adresini atadık. Kısaca is1 in gösterdiği adresteki değer diye
biliriz:)
#include <iostream.h>
#include <string.h>
int main(void)
{
char *is1="deneme";
int index;
for(index=(strlen(is1)-1); index>=0; index--)
cout<<is1[index]<<endl;
cout<<"\n"<<is1;
return 0;
}
Programın çıktısı
---------
e
m
e
n
e
d
deneme
---------
Burada bir işaretçi değişkenine değer
atamayı kullandık, aynı zamanda dizilerde gördüğümüz strlen()
fonksiyonun örneğini de yapmış olduk.
|