İlk beyan derleyici söyler someArray
olduğu en az 100 elementler uzun. Bu optimizasyonlar için kullanılabilir. Örneğin, bunun someArray
asla olmadığı anlamına da gelir NULL
.
C Standardının, işleve yapılan bir çağrı bu gereksinimleri karşılamadığında derleyicinin tanı koymasını gerektirmediğini unutmayın (yani, sessiz tanımsız davranıştır).
İkinci deklarasyon sadece someArray
( someArray
elementler değil !) Const olarak bildirilir, yani yazamazsınız someArray=someOtherArray
. Parametre ile aynıdır char * const someArray
.
Bu sözdizimi yalnızca []
bir işlev parametre listesindeki bir dizi bildiricisinin en iç kısmında kullanılabilir ; diğer bağlamlarda mantıklı olmazdı.
Yukarıdaki durumların her ikisini de kapsayan Standart metin C11 6.7.6.3/7'de (C99'da 6.7.5.3/7 idi):
Bir parametrenin '' tür dizisi '' olarak bildirilmesi, tür niteleyicilerinin (varsa) dizi türü türetme içinde [
ve ]
bu tür türünde belirtilenler olduğu '' tür için nitelikli işaretçi '' olarak ayarlanacaktır . Statik anahtar sözcüğü , dizi türü türevinin içinde [
ve ]
türünde de görünüyorsa , işleve yapılan her çağrı için, karşılık gelen gerçek bağımsız değişkenin değeri, bir dizinin ilk öğesine, en az boyut ifadesi.
int foo(struct bar [static 1]);
yerineint foo(struct bar *);
NULL işaretçileri kabul etmiyoruz fonksiyonlar için imza olarak. (Ben gcc derleyici uyarı verebilir böylece bu tür işlevleri işaretlemek için standart olmayan bir sözdizimi olduğunu biliyorum ..)