6 Mart 2017 Pazartesi
İşaretçiler ve Diziler
Diziler ve işaretçiler, C’de özel bir biçimde ilişkilidirler.
Birbirleri yerine hemen hemen her yerde kullanılabilirler.
Bir dizi ismi, sabit bir işaretçi olarak düşünülebilir.
Bu yüzden, bir dizinin herhangi bir elemanına işaretçi ile de erişilebilir.
int kutle[5], *p, *q;
p = kutle; -------------> 1. Elemanın adresi p işaretçisine atanıyor
p = &kutle[0];--------> 1. Elemanın adresi p işaretçisine atanıyor
q = &kutle[4];----------> 5. Elemanın adresi p işaretçisine atanıyor
Not: Dizi adı bir işaretçi olduğu için doğrudan aynı tipteki bir işaretçiye atanabilir.
Ayrıca, i bir tamsayı olmak üzere aşağıdaki iki ifade aynı anlamdadır.
kutle[i];
*(p + i);
Bunun sebebi, p işaretçisi kutle dizisinin başlangıç adresini tutmuş olmasıdır.
p+i işlemi ile i+1. elemanın adresi, ve *(p+i) ile de bu adresteki değer hesaplanır.
*(p+i); ? p nin gösterdiği adresten i blok ötedeki sayıyı hesapla
Örnek: *(p+3);
Bu deyimde 3, işaretçinin offsetidir.
İşaretçi, dizinin başlangıç adresini gösterirken, ve offset değeri dizi belirteciyle eştir. offset dizinin hangi elemanının kullanılacağını belirtir
Bu gösterime işaretçi/offset gösterimi denir.
Parantezler gereklidir çünkü * operatörünün önceliği + operatörünün önceliğinden yüksektir.
Parantezler olmadan yukarıdaki ifade, *p’ye 3 eklerdi. (yani, p’nin dizinin başlangıcını gösterdiği düşünülürse, kutle[0]’a 3 eklenirdi.)