Pointer: Dizi

Bir dizi, aynı tip elemanların hafızada birbiri ardına tutulduğu veri yapısıdır. C dilinde dizi değişkeninin adı dizinin başlangıç adresini gösteren bir pointer(işaretçi)dır.

Dizinin elemanlarına array_variable[ offset ] şeklinde ulaşılır. array_variable bir pointer olduğunda dizini offsetindeki değeri dereferans yaparak aynı değere ulaşabiliriz. Yani:

array_variable[ offset ] ve *(array_variable + offset) aynı anlama gelir.

derleyici array_variable[ offset ] okurken şu şekilde davranır:

    int array[100] dizisi icin int array[0] degerini okurken 

                int array[0]
                         ^
    1 - array bir dizi
                
                int array[0]
                          ^
    2 - pointer dizinin 0. elemanina git


                int array[0]
                ^
    3 - pointerı integer olarak yorumla
    int *(array + 0) için de ilk olarak dizi değişkeninden başlar.

    int *(array + 0)
         ^
    1 - () operatoru ++ ve -- operantorlerinden sonraki en oncelikli operator
    olduğundan once yorumlanır ve parantez içi gerçekleştirilir.

    int *(array + 0)
        ^
    2 - array in pointer olduğu anlaşılır,

    int *(array + 0)
     ^
    3 - array int olarak yorumlanır

İhtiyaç var mı bilmiyorum ama değişik notasyonlar da var. Pek çoğu üsteki iki notasyonun birbirine denk olmasından çıkarılabilir. Mesela

    arr[ i ] ve *( arr +i )

    arr[i][j] ve *(arr[i] + j) ve *( *(arr + i ) +j )

    arr[i][j][k] ve *(arr[i][j] + k) ve *(*(arr[i] +j) +k) ve *(*(*(arr + i) +j) +k) aynı şey.

referanslarını alarak veya dereferansı yok ederek adreslerine de olaşabiliriz. Mesela;

    &arr[ i ] ve ( arr +i )

    &arr[i][j] ve (arr[i] + j) ve ( *(arr + i) +j )

    &arr[i][j][k] ve (arr[i][j] + k) ve (*(arr[i] +j) +k) ve (*(*(arr + i) +j) +k) aynı şey.

Yaklaşık 50 yaşında olan bir programlama dilinin sözdizimi hakkında blog yazmak muhtemelen dünyanın en gereksiz işi😃 . Ama gene de yazmak istedim. Pointer dizileri, fonksiyon pointerlar, karmaşık deklerasyonlar ve daha  fazla bilgiyi The C Programming Language adlı efsanevi kitaptan bulabilirsiniz.


pointer

297 Words

2017-04-27 03:00 +0300