1.                                                

C++ Dersleri - 20)POİNTERLAR - 3 [ÇEVİRİ]

'C/C++' forumunda Hattab tarafından 10 Şubat 2016 tarihinde açılan konu

  1. Hattab

    Hattab New Member

    Katılım:
    22 Ekim 2015
    Mesaj:
    550
    Beğeniler:
    4
    Ödül Puanları:
    0

    POİNTER ARİTMETİĞİ

    Anladığınız gibi pointer, sayısal değerden oluşan bir adrestir.Bu nedenle pointerlar üzerinde aritmetik işlemler yapabilirsiniz.Kullanabileceğiniz 4 operatör vardır(++,--,+,-)

    Pointer Aritmetiğini anlamak için, ptr 1000 adresini gösteren int bir göstericidir.32-bit integer olduğunu varsayıyoruz, hadi pointer üzerinde aritmetik işlemler yapalım:
    ptr++

    ptr 1004 adresini gösterecektir, çünkü 1 zaman birimi kadar arttırıldı( yani 1 birim arttırdıl ki bu 32-bitlik bir sistemde int için 4 birim demek oluyor).Bu işlem gerçek değeri değiştirmeden pointeri bir sonraki hafıza lokasyonuna götürdü.Eğer ptr 1000 adresindeki karakteri gösterirse, yukardaki işlem yapıldığında 1001'i gösterir.Çünkü 32-bitlik bir sistemde char 1 birimlik alan kaplar.

    Pointer'i Arttırmak

    Programlarımızda arraylar yerine pointerları tercih ederiz çünkü değişken pointer artabilir fakat arraylar bunu yapamaz çünkü adresleri sabittir.Aşağıda bir pointerin değeri arttırılarak arraydaki elemanlara erişilmiştir:

    [HASHTAG]#include[/HASHTAG] <iostream>

    using namespace std;
    const int MAX = 3;

    int main ()
    {
    int var[MAX] = {10, 100, 200};
    int *ptr;

    // let us have array address in pointer.
    ptr = var;
    for (int i = 0; i < MAX; i++)
    {
    cout << "Address of var[" << i << "] = ";
    cout << ptr << endl;

    cout << "Value of var[" << i << "] = ";
    cout << *ptr << endl;

    // point to the next ********
    ptr++;
    }
    return 0;
    }

    Yukardaki kodun çıktısı aşağıdakine benzer bir şey olmalıdır:
    Address of var[0] = 0xbfa088b0
    Value of var[0] = 10
    Address of var[1] = 0xbfa088b4
    Value of var[1] = 100
    Address of var[2] = 0xbfa088b8
    Value of var[2] = 200

    Bir Pointer'i Azaltma

    Aynı şekilde azaltma operatüyle de işlem yapabiliriz:

    [HASHTAG]#include[/HASHTAG] <iostream>

    using namespace std;
    const int MAX = 3;

    int main ()
    {
    int var[MAX] = {10, 100, 200};
    int *ptr;

    // let us have address of the last element in pointer.
    ptr = &var[MAX-1];
    for (int i = MAX; i > 0; i--)
    {
    cout << "Address of var[" << i << "] = ";
    cout << ptr << endl;

    cout << "Value of var[" << i << "] = ";
    cout << *ptr << endl;

    // point to the previous ********
    ptr--;
    }
    return 0;
    }

    Yukardaki kodun çıktısı aşağıdakine benzer olmalıdır:
    Address of var[3] = 0xbfdb70f8
    Value of var[3] = 200
    Address of var[2] = 0xbfdb70f4
    Value of var[2] = 100
    Address of var[1] = 0xbfdb70f0
    Value of var[1] = 10

    Pointer Karşılaştırmaları


    Pointerlar , ilişkisel operatörler kullanılarak karşılaştırılabilirler.(==,<,>).Eğer p1 ve p2 bir diğeri ile ilişkili olan arrayın elemanları gibi değişkenleri gösteriyorsa, p1 ve p2 karşılaştırılabilir.

    Aşağıdaki program kodları, azaltma operatörü kullanarak işlem yapılmasını örneklemektedir:

    [HASHTAG]#include[/HASHTAG] <iostream>

    using namespace std;
    const int MAX = 3;

    int main ()
    {
    int var[MAX] = {10, 100, 200};
    int *ptr;

    // let us have address of the first element in pointer.
    ptr = var;
    int i = 0;
    while ( ptr <= &var[MAX - 1] )
    {
    cout << "Address of var[" << i << "] = ";
    cout << ptr << endl;

    cout << "Value of var[" << i << "] = ";
    cout << *ptr << endl;

    // point to the previous ********
    ptr++;
    i++;
    }
    return 0;
    }

    Yukardaki kodun çıktısı aşağıdaki benzer olmalıdır:
    Address of var[0] = 0xbfce42d0
    Value of var[0] = 10
    Address of var[1] = 0xbfce42d4
    Value of var[1] = 100
    Address of var[2] = 0xbfce42d8
    Value of var[2] = 200

    Alıntıdır.
     
  2. n0hampton2

    n0hampton2 New Member

    Katılım:
    21 Haziran 2018
    Mesaj:
    2
    Beğeniler:
    0
    Ödül Puanları:
    1
    Cinsiyet:
    Erkek

Bu Sayfayı Paylaş

Share