İçi boş, iki boyutlu dizi nasıl oluşturulur?

Direkt yapmak istediğimin sözdizimini giriyorum:

int array [][]; 

Böyle bir şey yapmak istiyorum, çünkü: Bu dizi global olmak zorunda ve dizinin eleman sayısını sonradan tanımlamak zorundayım. Yani dizi hem en üst blok da olacak, hem de alt bloklardan birinde dizi sayısı tanımlanabilecek. Umarım anlatabilmişimdir… Eğer cümlelerle anlattığım şeyi başka türlü de yapabiliyorsak o da olur.

Alternatif olarak programımda bir çözüm yolu daha var ama onun için de içeri bloktaki elemanın global olması lazım.

 extern int array [a][b] 
diyorum ama bu seferde hata alıyorum. İkinci alternatif daha olası geliyor bana…
(Birinci kod C’ de tanımsız)

?
Buraya bakabilirmisiniz istediğiniz bumu ?

1 Beğeni

Böyle bir şeyin yapılamayacağını söylemişler.

Global değişken kullanmak çoğunlukla en iyi yöntem olmuyor, ne yapmaya çalıştığınızı anlatırsanız daha iyi bir yöntem gösteren çıkabilir.

Global değişkenlerin boyutu derleme anında bilinmek zorunda, sonradan ile kastınız program çalışırken ise böyle bir şey yapamazsınız. Ama bir array yerine pointer kullanıp (int **array) o pointer’a main fonksiyonu içinde malloc kullanarak istediğiniz değeri atayabilirsiniz.

Blok ile ne kastettiğinize emin değilim.

1 Beğeni

Bloktan kastım süslü parantezlerin arası. {}

Henüz dediğiniz şeyi bilmiyorum. Yakında öğreneceğim ama.

Sorunu çözdüm. Bir dizi tanımladım ve eleman sayısını 10000 yaptım. int arrray [100][100]
Pek verimli bir yöntem olduğu söylenemez ama sorunu basit bir şekilde çözmemi sağladı.
Bu arada matris çarpımı yapan bir program yapıyordum. Yardımınız için teşekkürler.

Global değişkenler hakkında konuşurken bloktan ziyade fonksiyonlardan bahsetmek daha anlaşılır olur.

Dizinin bu boyutu geçmeyeceğine eminseniz bu da bir çözüm.

Bu programın neden global değişkenler gerektirdiğini anlamadım.

Matrisler için genelde malloc veya VLA’lar kullanılıyor.

Dediklerinizin ne olduğunu henüz bilmiyorum. İleride öğreneceğim. Her şey sırayla. Global değişken gerekmesinin sebebi, bir kaç tane do-while döngüsü olması.

Bu mumkun degil cunku array’in ikinci boyu belli degil.

Zannetmiyorum.

Kodda birkac tane do-while dongusunun olmasi array’lerin global olmalarini gerektirmiyor.


Yapmaya calistigin seyi biraz daha dusunursen, alt bloklardan birindeki boyut bilgisini diger bir alt bloga aktaramayacagin icin, mantiksiz oldugunu fark edeceksin. Cozum C’nin sadece ufak bir kolaylik olsun diye sundugu n-boyutlu array mekanizmasini birakip kendi dinamik array uretip kullanan kodunu yazmak. (Niye mantiksiz oldugunu anlayamiyorsan onu da anlamana yardimci olacaktir; kucuk boyutlarin boyunu bilmeden buyuk boyutlarda gezinmek imkansiz.)

1 Beğeni