İfade bir type name[count]
işlevde yazılırsa, C derleyicisine yığın çerçeve sizeof(type)*count
baytlarına tahsis etmesini ve dizideki ilk öğenin adresini hesaplamasını söylersiniz .
İfade type name[count]
tüm işlev ve yapı tanımlarının dışında yazılırsa, C derleyicisine veri segmenti sizeof(type)*count
baytlarına tahsis etmesini ve dizideki ilk öğenin adresini hesaplamasını söylersiniz .
name
aslında dizideki ilk öğenin adresini saklayan sabit bir nesnedir ve bir hafızanın adresini saklayan her nesneye işaretçi denir, bu yüzden name
dizi yerine işaretçi olarak davranmanızın nedeni budur . C'deki dizilere yalnızca işaretçilerle erişilebildiğini unutmayın.
Eğer count
sıfır değerlendirir daha sonra yığın çerçevesi ya da veri bölümü ya da sıfır bayt tahsis ve dizideki ilk elemanın adresini geri C derleyici anlatmak bir sabit ifadesidir, ancak bu durumu ile ilgili sorun, ilk eleman uzunlukta bir dizi mevcut değildir ve var olmayan bir şeyin adresini hesaplayamazsınız.
Bu rasyoneldir, o element no. -length dizisinde count+1
mevcut değil count
, bu nedenle C derleyicisinin sıfır uzunluklu diziyi bir işlevin içinde ve dışında değişken olarak tanımlamasını yasaklamasının nedeni budur, çünkü name
o zaman içeriği nedir? name
Tam olarak hangi adres saklanıyor?
Eğer p
bir işaretçidir daha sonra ifade p[n]
eşdeğerdir*(p + n)
Sağ ifadede * yıldızı vasıtaları tarafından işaret belleğe erişim ibrenin KQUEUE operasyonu olduğunda p + n
Adresinde depolanan bellek veya erişim p + n
, p + n
işaretçi ifadesidir, bu adresini alır p
ve bu adrese sayı ekler n
çarpın işaretçinin türünün boyutu p
.
Adres ve numara eklemek mümkün mü?
Evet mümkündür, çünkü adres onaltılık gösterimde yaygın olarak temsil edilen işaretsiz tam sayıdır.