flexible array members (yapıların esnek dizi öğeleri)

C99 standartlarıyla C diline eklenen öğelerden biri “flexible array members(yapıların esnek dizi öğeleri). Bir “flexible array” bir yapı türünün son öğesi olarak olarak bildirilebiliyor:

Yukarıda örnekte struct Student türünün ikinci ve son öğesinin boyut belirtilmeden bildirilen grades isimli bir int dizi (incomplete array type) olduğunu görüyorsunuz. Yapının bu öğesi için bir yer elde edilmediği sürece bu öğe yapı nesnesi içinde bir yer kaplamayacak. Aşağıdaki koda bakalım:

Kodu derleyip çalıştırdığınızda sizeof(int) ve sizeof(struct Student) değerlerinin aynı olduğunu göreceksiniz.

“flexible array
” yapının son öğesi olmak zorunda. Örneğin aşağıdaki gibi bir bildirim geçersiz:

Peki yapının bu esnek dizi öğesini nasıl kullanacağız? Bir struct Student nesnesinin bellek alanını dinamik bellek işlevleriyle elde ederek “flexible array” öğemizin boyutunu programın çalışma zamanında belirleyebiliriz:

Esnek dizi özelliği olmasaydı öğe olan grades isimli dizinin boyutunu mümkün olduğunca büyük belirlemek zorunda kalacaktık:

Yazacağımız kodda oluşturacağımız bazı struct Student nesneleri için muhtemelen, öğe olan dizinin yalnızca belirli sayıda elemanını kullanacağız. Bu da toplamda kullanılan bellek alanının gereksiz yere artması sonucunu doğuracak.

Yapıların esnek dizi öğelerine ilk değer verilemiyor. Aşağıdaki kod geçersiz:

Ancak birçok derleyici böyle bir nesne tanımlamasına bir eklenti (extension) ile izin veriyor.

Esnek dizi öğesi içeren yapı nesneleri birbirine atama işleciyle atandığında esnek dizi öğeleri birbirine kopyalanmaz:

Esnek dizi öğesinin kopyalanması için standart strcpy ya da memcpy işlevlerini çağırabiliriz.

Bu aracın C99 standartları ile dile eklenmesinden önce, esnek dizi öğesi kullanmak ancak derleyicinin sağladığı eklentilerle mümkündü. Derleyiciler tarafından sunulan tipik eklentilerden biri yapının son öğesinin boyutu 0 olan bir dizi olarak bildirilebilmesi:

C++ dilinin sentaksında “flexible array member” yer almıyor.

Share

Necati Ergin

C ve Sistem Programcıları Derneğinde eğitmen olarak çalışıyor.

Bunlar da ilginizi çekebilir

Kod Eklemek İçin Okuyun