Thread overview
Dizi parantezlerinde değişken kullanmak
Jun 02, 2020
cos00kun
Jun 02, 2020
cos00kun
Jun 04, 2020
kerdemdemir
June 02, 2020
void main() {
   char [10][10] ekran=' ';
   ekran[10/2][10/2]='x';
   int cikis=1;
   char tus;

yerine ;

void main() {
   int satir=10;
   int sutun=10;
   char [satir][sutun] ekran=' ';
   ekran[satir/2][sutun/2]='x';
   int cikis=1;
   char tus;

kullanmak istiyorum ama 'char [satir][sutun] ekran=' ';' buradaki değişkenleri [] içinde kullanamıyorum bu normal midir ? Diziler bölümüne baktım ama bununla ilgili bir şey rastlayamadım ( Diziler derken TV dizileri değil elbette :-p )
teşekkürler..

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

June 02, 2020

Ali hocam;

void main() {
   int satir=10;
   int sutun=10;
   char [satir][sutun] ekran=' ';
...
...

burada 'ekran' dizisi zaten statik dizi olmuyor mu ki ? ayrıca derleme zamanında bilinmesi gerekse bile derleyici bir üstte satır ve sutun değişkenlerini okuyacağı için dizide bunun farkına varamıyor mu ? Boş zaman bulmanız dileklerimle!! çünkü sayemde sizin buna ihtiyacınız olacak :-D

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

June 02, 2020

Dizi tanımlarken uzunluk belirtiliyorsa statik dizi (sabit uzunluklu dizi) oluyor:

http://ddili.org/ders/d/diziler.html#ix_diziler.statik%20dizi

Hep kullandığımız dinamik diziden oldukça farklı bir kavramdır.

Bu tür dizilerin uzunluklarının derleme zamanında bilinmesi şarttır. Değişken kullanabilirsin ama 'enum' ile tanımlaman gerek:

enum satır = 10;

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

June 02, 2020

Dediğin gibi olamıyor. Nedenini gösteren bir örnek:

int satır = 0;
foo(satır);
char[satır] ekran;

Derleyici satır'ın foo tarafından değiştirilip değiştirilmediğini artık bilemez. Yani, araya foo() çağrısı yerleştirdik diye şimdi derleme hatası ile mi karşılaşalım? Derleyiciden bu kadar anlayış beklemek hem programların istemeden yanlış anlaşılmalarına neden olur hem de derleyicinin kodu incelemek için belki de sonsuz zaman harcamasını gerektirir. Çünkü sonuçta bir insan gibi akıllı olmasını bekliyoruz.

Onun yerine, dil kural getirmiş: 'int' dersen çalışma zamanında değiştirilebilen değişkendir. Statik diziler öyle değişkenlerle tanımlanamazlar. Basit ve sıkıntısız... :)

Eğer çalışma zamanında bilinen uzunlukta dizi istiyorsan bu sefer de statik dizi kullanamazsın. O da basitçe şöyle ilklenebilir:

char[] ekran;
ekran.legal = satır;

Veya

auto ekran = new char[](satır);

vs.

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

June 04, 2020

Alıntı:

>

Bu tür dizilerin uzunluklarının derleme zamanında bilinmesi şarttır. Değişken kullanabilirsin ama 'enum' ile tanımlaman gerek:
enum satır = 10;

Ali abi D de bu isler sadece enum 'lami oluyor.

immutable veya const int filan desek olur mu?

Erdem

Not: Denemek veya internetten bakmak daha kolay olsa bile konu acilmisken sormak istedim

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

June 04, 2020

enum veya 'static const' da oluyor.

immutable olmuyor çünkü onlar normalde çalışma zamanında ilklenirler.

const da olmuyor çünkü derleme zamanında kod işletmeyle ilgisi olmayan ve "ben bu değişkeni değiştirmeyeceğim" sözü verdiren bir olanak.

Öte yandan, aslında enum şart değil. Daha doğrusu, "derleme zamanında işletilebilen bir ifade" olurdu. Yani, değer bir işlevden bile döndürülebilir (ama o işlev giriş/çıkış gibi işlerle uğraşmayan ve derleme zamanında bile işletilebilen bir işlev olmalı):

int[foo("merhaba")] dizi;

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]