Geri git   Van.GEN.TR Forum | Yerel Van Forumu > Bilgisayar > Programlama > Visual Basic, Delphi, C++ Ve Diğer Diller

Cevapla
 
Konu Araçları Stil
Alt 15/12/07, 12:52   #1
Bur2
Korgeneral
 
Bur2 - ait Kullanıcı Resmi (Avatar)
 
Üyelik tarihi: Oct 2007
Bulunduğu yer: evde :)
Yaş: 45
Mesajlar: 2.544
Tecrübe Puanı: 50 Bur2 has a reputation beyond repute Bur2 has a reputation beyond repute Bur2 has a reputation beyond repute Bur2 has a reputation beyond repute Bur2 has a reputation beyond repute Bur2 has a reputation beyond repute Bur2 has a reputation beyond repute Bur2 has a reputation beyond repute Bur2 has a reputation beyond repute Bur2 has a reputation beyond repute Bur2 has a reputation beyond repute
Standart C++ da pointer kavramı

Merhaba bu makalemde C++ dilini öğrenen bir çok kişinin, belkide öğrenmek için diğer kısımlara göre biraz daha fazla çaba sarfettiği
pointers(işaretçiler) konusuna değinmeye çalışacağım. Lafı fazla uzatmadan direk temel bilgilere başlamak istiyorum.

Öncelikle bildirmek isterimki bir işaretçi asla normal değişkenler gibi bir değer tutmaz.Herhangi bir değişkenin
hafızadaki adresini barındırır. Örneğin sinema salonlarında 27 No lu koltuğun bileti hep 27 No lu bilettir.Ama değişen nokta ise
koltuğa oturan kişidir. Normal bir değişken burada koltuğa oturan kişiyi tutar. İşaretçi ise koltuğu.

İşaretçileri tanımlarken başlarına * operatörü koymamız yeterlidir.

Örnek:

int *a,*b;

Burada a ve b isimli 2 adet int türünden işaretçiyi tanımlamış olduk. Fakat aşağıdaki şekilde bir kodlamada;

int *a, b;

Burada sadece a isimli değişken işaretçi b ise int türünden bir değişkendir.

İşaretçiler konusunda bilmeniz gereken 2 adet önemli operatör vardır. Bunlar Reference ( & ) ve Dereference ( * ) operatörleridir.
İşaretçiler tek başlarına çalışamazlar ve değer alamazlar bunun için başka bir değişkeni referans almak zorundadırlar.

örnek:

1: int main()
2: {
3: int *a;
4: int b=25;
5: a = &b;
6: return 0;
7: }

Burada a isimli işaretçi b isimli değişkeni referans olarak almaktadır. & operatörünü bu kod satırı üzerinde tam Türkçe'ye
çevirecek olursak "a eşittir b nin adresi" olarak elde edebiliriz.Bu kod parçacığında zaten bizi ilgilendiren tek nokta 5. satırdaki kod.Referans
operatörü şimdilik bu kadar. İlerki örneklerimizde zaten konuyu daha iyi kavrayacaksınız.

Dereference operatörünü bir örnek üzerinde açıklayacak olursak;

Örnek:

1: #include <iostream>
2: using namespace std;
3: int main()
4: {
5: int *a, b=25;
6: a = &b;
7: cout << a << endl;
8: cout << b << endl;
9: *a=30;
10: cout << *a << endl;
11: return 0;

Tek tek inceleyecek olursak 6.satırda a isimli işaretçimiz b isimli değişkeni refrans olarak alıyor ve b'nin adresini tutuyor.
7.Satırda b değişkeninin belleğin hangi adresinde bulunduğunu yazdırıyoruz.(Hatırlayalım işaretçiler adres leri tutuyorlardı)
8.Satır da b isimli değişkenimiz direkt olarak yazdırıyoruz.
9.Satır sa en can alıcı nokta *a=30; satırı ile şunu diyoruz. "a işaretçisinin adresine git ve oraya 30 değerini koy".
* operatörüne dikkat edelim. eğer a=30 deseydik derleyici bize hata verecekti.Bu durumda eskiden o adreste bulunan 25 değeri silinecek
ve yerine 30 değeri yazılacaktır.
10. Satır da ise ekranda çıktı olarak gene 30 sayısını görürüz. Burada ise denilen şu; "a işaretçisinin gösterdiği adrese git ve orada bulunan
değeri ekrana yaz"

Dereference operatörünüde bu şekilde anlatmaya çalıştım. Umarım faydalı olabilmişimdir.
İncelemeniz için bir örnek vererek devam etmek istiyorum


Örnek:

#include <iostream>
using namespace std;

int main ()
{
int a, b;
int *r;

r = &a;
*r = 20;
r = &b;
*r = 23;
cout << "a is " << a << endl;
cout << "b is " << b << endl;
return 0;
}

Bu örnekteki tüm noktaları zaten incelemiştik.

Şimdi de pointer üzerinde işlem yapmayı öğrenelim.

1: int main()
2: {
3: int *a, *b;
4: int f, c=10, d=15;
5: a=&c;
6: b=&d;
7: f=*a+*b;
8: return 0;
9: }

7. Kod satırın da yapılan işleme baktığımızda f değişkenine a ve b işaretçilerinin gösterdiği adreslerdeki değerlerin ( c ve d değerleri)
atandığını görürüz. Görüldüğü gibi normal bir işlemden tek farkı (*) operatörü. İşaretçilerle işlem yapmak bize hız kazandırır. Şöyle bir şey düşünün
sizi 50 odalı bir daire ye sokuyorlar ve diyorlarki odalardan birinde kırmızı gömlekli bir adam var o adamı tut getir. Birde 17 numaralı odada kırmızı
gömlekli bir adam olduğunu söylüyorlar sizce hangisi ?


Birazda pointer ların aritmetiği üzerinde duralım. Mesela biz a isimli bir integer değişkene a++ şeklinde bir işlem gerçekleştirsek
a nın değeri her işlemden sonra 1 artardı. Fakat short türünden a isimli bir işaretçiye a++ desek ? Biz susalım resimler konuşsun.




Son olarak işaretçilerin işaretçileri nasıl işaret ettiğine bakalım. (Biraz tekerleme gibi oldu)
İlk başta söylediğimiz gibi işaretçiler adres değerlerini tutuyorlardı. Fakat bu değerler ile onlarda hafızada bir yerdeler.Peki oraya nasıl ulaşırız?
Bu işte imdadımız (**) operatörü koşuyor. Aşağıdaki örneğe bakalım.

char a;
char * b;
char ** c;
a = 'z';
b = &a;
c = &b;

Gördüğünüz gibi b değişkeni zaten bir işaretçi ve a değişkeninin adresini tutmakta. C değişkeninin ise durumu belli
__________________

[Bu Adresi (link) Görme Yetkiniz Yok BEDAVA'ya Üye Ol Sitemizden Faydalan....]

[Bu Adresi (link) Görme Yetkiniz Yok BEDAVA'ya Üye Ol Sitemizden Faydalan....]


Bur2 isimli Üye şimdilik offline konumundadır   Alıntı ile Cevapla
Konu Sayısı: 497
Takımınız:
Alt 31/07/08, 15:29   #2
Neutralizer
Yasaklı kullanıcı
 
Neutralizer - ait Kullanıcı Resmi (Avatar)
 
Üyelik tarihi: Jan 2008
Bulunduğu yer: İstediğin yerden
Mesajlar: 1.883
Tecrübe Puanı: 0 Neutralizer has a reputation beyond repute Neutralizer has a reputation beyond repute Neutralizer has a reputation beyond repute Neutralizer has a reputation beyond repute Neutralizer has a reputation beyond repute Neutralizer has a reputation beyond repute Neutralizer has a reputation beyond repute Neutralizer has a reputation beyond repute Neutralizer has a reputation beyond repute Neutralizer has a reputation beyond repute Neutralizer has a reputation beyond repute
Standart

paylaşım için tşkrlr
Neutralizer isimli Üye şimdilik offline konumundadır   Alıntı ile Cevapla
Konu Sayısı: 316
Takımınız:
Cevapla


Konuyu Toplam 1 Üye okuyor. (0 Kayıtlı üye ve 1 Misafir)
 

Yetkileriniz
Yeni Mesaj yazma yetkiniz Aktif değil dir.
Mesajlara Cevap verme yetkiniz aktif değil dir.
Eklenti ekleme yetkiniz Aktif değil dir.
Kendi Mesajınızı değiştirme yetkiniz Aktif değildir dir.

BB code is Açık
Smileler Açık
[IMG] Kodları Açık
HTML-KodlarıKapalı
Gitmek istediğiniz klasörü seçiniz


Bütün Zaman Ayarları WEZ +3 olarak düzenlenmiştir. Şu Anki Saat: 11:13 .


Powered by vBulletin
Copyright © 2000-2007 Jelsoft Enterprises Limited.
Sitemap
6, 5, 3, 7, 8, 9, 10, 11, 12, 13, 14, 15, 113, 16, 17, 18, 19, 81, 20, 27, 22, 23, 24, 25, 26, 48, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 43, 136, 40, 58, 45, 42, 44, 46, 47, 53, 54, 55, 56, 57, 59, 60, 70, 61, 62, 63, 64, 65, 66, 68, 69, 71, 72, 74, 75, 76, 77, 78, 79, 80, 82, 83, 96, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 98, 97, 100, 101, 102, 103, 106, 104, 105, 112, 109, 108, 107, 110, 111, 114, 115, 118, 116, 117, 119, 148, 154, 124, 165, 122, 120, 123, 121, 150, 153, 125, 128, 129, 131, 132, 133, 134, 135, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 151, 149, 202, 175, 164, 152, 167, 155, 156, 157, 158, 159, 160, 161, 162, 163, 195, 169, 166, 168, 170, 171, 172, 199, 174, 173, 196, 200, 176, 177, 180, 178, 179, 182, 189, 187, 184, 186, 191, 192, 193, 194, 197, 198, 201, 203, 229, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 236, 231, 232, 233, 234, 235, 237, 240, 239, 241, 243, 242, 244,