C++ Pointer
Merhaba arkadaşlar, bu dersimizde pointerlar ile devam edeceğiz.Pointerlar Türkçesiyle işaretçiler C diline özgü değişkenlerdir.Pointerlar bir değişkenin bellek adresini tutar.Pointer olarak kullanacağımız ifadenin önüne * (yıldız) koyulur.Pointerın tanımlayarak nasıl olduğunu anlayalım.
Pointer genel tanımı;
Tipi *Adı;
Tipi *Adı=&2.değişken;
int *p;
p değişkeni önündeki * ile bir değişkenin adresini tutar.& ise adres operatörüdür.x int bir değişken olsun &x ,x değişkeninin adresini ,*(&x) ise bu adresin işaret ettiği değişkeni gösterir.
int x=23;
int *y=&x;//y bir pointer ve &x adresindeki veriyi tutar.
y=&x //y değişkeni x değişkeninin adresini tutar.
->Bir işaretçiye bir değişken veya bir değişkene bir işaretçi atanamaz.
Bir örnek ile pointerları iyice anlayalım.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
#include "stdafx.h" #include<iostream> using namespace std; int main() { int *x; int y = 23; x = &y; cout << "*x'nin tuttugu deger : " << *x << endl; cout << "x'nin tuttugu deger : " << x << endl; cout << "y adresi : " <<&y<< endl; cout << "y'nin tuttugu deger :" << y << endl; system("PAUSE"); return 0; } |
İlk olarak int *x bir işaretçi tanımladık.Daha sonra int y olarak bir değişken tanımladık.Ve x değişkenine de y değişkeninin adresini atadık.
x ile &y aynı adresi ifade ettiği gibi *x ile y aynı yeri ifade eder.
İşaretçi sabitleme;
const int *p=&a; //*p pointerı sabit
int *const x=&a; //x sabit
Bir örnekte pointerlardaki sabitliği görelim.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
#include "stdafx.h" #include<iostream> using namespace std; int main() { int a = 14; int b = 20; const int *p = &a; int *const x = &a; int const *y = &b; cout << "*p= " << *p << " p= " << p << " *x=" << *x << " x = " << x << endl; p++; *x = *y; cout << "*p=" << *p << " p= " << p << " *x=" << *x << " x = " << x << endl; system("PAUSE"); return 0; } |
Pointerlarda birden fazla yıldız kullanarak bir adresin içindeki veriyi farklı pointerlarla ifade edilir.Bunu da bir örnekle daha iyi anlayabiliriz.
1 2 3 4 5 6 7 8 9 10 11 |
#include "stdafx.h" #include<iostream> using namespace std; int main() { int a = 14, *p1 = &a,**p2 = &p1,***p3 = &p2; cout << "a'nin degeri= " << a << " \n*p1 =" << *p1 << " \np1 =" << p1 << " \n**p2 =" << **p2 << " \n*p2 =" << *p2 << " \np2 =" << p2 << " \n***p3 =" << ***p3 << " \n**p3 =" << **p3 << " \n*p3 =" << *p3 << " \np3 s=" << p3 << endl; system("PAUSE"); return 0; } |
Bu örnekte *p1,**p2 ve ***p3 aynı değerleri gösterir.Her yıldız aslında kendinden önceki adresi tutarak aynı verileri tutar.