C++ İsaretçiler
Isaretçilere Giris
Isaretçiler (Pointers) ve bundan önce görmüs oldugumuz diziler (Arrays)
ilerde yapacagimiz uygulamalarda kullanimina kesin ihtiyaç
duyacagimiz basliklardir. Bunlar bize dinamik bellek kullanimini
saglarlar. Dinamik bellek kullanimindan bahsedecek olursak,
bellegimizin kutucuklardan olustugunu hayal edin. 100 kutucuklu bir
bellegimiz var. Bu kutucuklarin her birinin bir adresi vardir ve biz
de bu adresler yolu ile kutucuklara erisiriz. Iste isaretçiler bu
erisimi sagliyor. Bu konuya çalisirken, anlamanin gayet kolay
oldugunu göreceksiniz. Fakat ben sizi uyarayim, en kolay konular en
çok hata yapilanlardir. Isaretçilerde yapilan hatalar programin
hatta sistemin çökmesine sebep olabilir, ayni zamanda yapilan
hatalari kolay kolay bulamayabilirsiniz. Büyük projelerde bu sizi
bayagi sikintiya sokacaktir. Onun için isaretçiler konusunda,
kullanim teknigi hakkinda size sik sik tavsiyelerde bulunacagim.
Isaretçilerin Tanimlanmasi ve Deger Atanmasi
Bir isaretçi tipi, hangi tipe isaret ettigini belirten ve birer
adres degeri içeren verilere sahiptir. Bir isaretçi degisken
bildirimi, açik olarak hangi tip veriyi kullanacagini bildirerek
baslar. Derleyicimizde * isareti ile isaretçi degiskeni
tanimladigimizi anlar.
<tip> *<isaretçi adi>; Seklinde yazilir. Örnegin, int *IsaretciAdi;
Simdi de ayni satirda birden fazla isaretçi tanimlayalim.
Int *is1, *is2, *is3;
Seklinde tanimlayabiliriz. Benim size tavsiye ettigim budur. Fakat
farkli bir yol olarak da (Int *) is1, is2, is3; seklinde de
yazilabiliriz. Burda dikkat etmemiz gereken olay ise, int tipinde
isaretçileri tanimlarken herhangi bir degiskende tanimlarsak (int *)
seklinde tek satirda yapmamiz hatalidir.
(Int *) is1, is2, is3, x=4; //hata
int *is1, *is2, *is3, x=4; //dogru
Sanirim ne demek istedigimi anladiniz:).
Daha önce görmüs oldugumuz "&" adres operatörünü hatirlayalim,
kendisisinden sonra gelen ifadenin adresini gösterir.
Int x;
Int *is1=&x;
x i tanimladik, sonra is1 isaretimize x in adresini atadik. Kisaca
is1 in gösterdigi adresteki deger 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;
}
Programin çiktisi
---------
e
m
e
n
e
d
deneme
Isaretçiler (Pointers) ve bundan önce görmüs oldugumuz diziler (Arrays)
ilerde yapacagimiz uygulamalarda kullanimina kesin ihtiyaç
duyacagimiz basliklardir. Bunlar bize dinamik bellek kullanimini
saglarlar. Dinamik bellek kullanimindan bahsedecek olursak,
bellegimizin kutucuklardan olustugunu hayal edin. 100 kutucuklu bir
bellegimiz var. Bu kutucuklarin her birinin bir adresi vardir ve biz
de bu adresler yolu ile kutucuklara erisiriz. Iste isaretçiler bu
erisimi sagliyor. Bu konuya çalisirken, anlamanin gayet kolay
oldugunu göreceksiniz. Fakat ben sizi uyarayim, en kolay konular en
çok hata yapilanlardir. Isaretçilerde yapilan hatalar programin
hatta sistemin çökmesine sebep olabilir, ayni zamanda yapilan
hatalari kolay kolay bulamayabilirsiniz. Büyük projelerde bu sizi
bayagi sikintiya sokacaktir. Onun için isaretçiler konusunda,
kullanim teknigi hakkinda size sik sik tavsiyelerde bulunacagim.
Isaretçilerin Tanimlanmasi ve Deger Atanmasi
Bir isaretçi tipi, hangi tipe isaret ettigini belirten ve birer
adres degeri içeren verilere sahiptir. Bir isaretçi degisken
bildirimi, açik olarak hangi tip veriyi kullanacagini bildirerek
baslar. Derleyicimizde * isareti ile isaretçi degiskeni
tanimladigimizi anlar.
<tip> *<isaretçi adi>; Seklinde yazilir. Örnegin, int *IsaretciAdi;
Simdi de ayni satirda birden fazla isaretçi tanimlayalim.
Int *is1, *is2, *is3;
Seklinde tanimlayabiliriz. Benim size tavsiye ettigim budur. Fakat
farkli bir yol olarak da (Int *) is1, is2, is3; seklinde de
yazilabiliriz. Burda dikkat etmemiz gereken olay ise, int tipinde
isaretçileri tanimlarken herhangi bir degiskende tanimlarsak (int *)
seklinde tek satirda yapmamiz hatalidir.
(Int *) is1, is2, is3, x=4; //hata
int *is1, *is2, *is3, x=4; //dogru
Sanirim ne demek istedigimi anladiniz:).
Daha önce görmüs oldugumuz "&" adres operatörünü hatirlayalim,
kendisisinden sonra gelen ifadenin adresini gösterir.
Int x;
Int *is1=&x;
x i tanimladik, sonra is1 isaretimize x in adresini atadik. Kisaca
is1 in gösterdigi adresteki deger 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;
}
Programin çiktisi
---------
e
m
e
n
e
d
deneme
C ve C++ Dersleri
- C Diline Giriş
- C Dilinde Aritmetik İşlemler
- C Fonksiyonlar
- C Koşula Bağlı İşlem Satırları
- C Else Komutu Ve Kod Blokları
- C Kod Blokları
- C Döngüler
- C Break Deyimi
- C Switch Kalıbı
- C Goto Deyimi
- C Format Tanımlayıcıları
- C Değişken Tanımlayıcıları
- C Aritmetik İşlemciler
- C++ Diziler Ve Sözcükler
- C++ İsaretçiler
- C++ İsaretçiler Ve Diziler
- C++ Dersleri
- C++ Degişkenler
- C++ Veri Tipleri
- C++ Operatörler
- C++ İf Komutu
- C++ İf - Else Komutu
- C++ Switch-Case Komutu
- C++ While Döngüsü
- C++ Do - While Döngüsü
- C++ For Döngüsü
- C++ Break Ve Exit
- C++ Fonksiyonlar
- C++ Dizilier
- C++ Dinamik Diziler