Çaydanlıktan gelen sorular - sayfa 123

 
papaklass :

 MqlRates mrate[];//массив нулевого размера

ArrayResize ve ArrayInitialize kullanımı. ne için belli değil.

genellikle CopyRates ile bu yapı kullanılır.

 
papaklass :

Renat, böyle yapmanın daha iyi olduğunu söyledi:

 MqlRates mrate[] = { 0 };     //структура для хранения информации о ценах, объемах и спреде.

Anlamaya çalışalım. Hatırladığım kadarıyla Renat bir dizi değil, basit bir değişkenin başlatılmasından bahsetmişti. Savaşlarda, El Kitabında benzer örnekler ortaya çıktı:

 //--- инициализация всех полей структуры нулевым значением
MqlTradeRequest request={ 0 };

Bildirimde başlatmaya çalıştığınızda, basit bir değişken yerine bir dizi üstlenilir. Bu örneği El Kitabında buldum:

 double f[]     = { 0.0 , 0.236 , 0.382 , 0.5 , 0.618 , 1.0 };

Если размер инициализируемого массива не указан, то он 
определяется компилятором, исходя из размера инициализирующей последовательности.

Burada dizi sonlu sayıda değerle başlatılır ve açıklamaya göre derleyici, bu değerlerin sayısına göre böyle bir dizinin boyutunu belirler. Tembelliği kontrol etmek için - büyük olasılıkla, örnekteki f[] dizisinin boyutu 6'ya eşit olacaktır.

Örneğinizde, {0} başlatma dizisinin boyutu 1'dir. Buna göre, derleyici, büyük olasılıkla, mrate[] dizisinin boyutunu 1 olarak belirler. Burada, ilgi uğruna, aşağıdaki gibi belirtin:

 MqlRates mrate[] = { 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 };     //структура для хранения информации о ценах, объемах и спреде.
Hata verir mi?
 
papaklass :
Batırdım. Swan açıkça açıkladı. Yanlış yapıyı aldım. Hiç başlatılması gerekmez, çünkü değerler alır. Değerlerini verenleri başlatmak gerekir. Yanılmışım.

Ana şey anlaşıldı. Renat'ın kendisiyle ilgili sorunun ilginç olduğu ortaya çıktı, ben de bir şeyler anladım.

 

çift f[] = { 0.0, 0.236, 0.382, 0.5, 0.618, 1.0 }; dinamik bir dizi değil.

Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
  • www.mql5.com
Основы языка / Типы данных / Объект динамического массива - Документация по MQL5
 
220Volt :

çift f[] = { 0.0, 0.236, 0.382, 0.5, 0.618, 1.0 }; dinamik olmayan dizi

double f[] kendisi dinamik bir dizidir. Yaratılışta ilan edilen odur. Son bir başlatma dizisi ile başlatmadan sonra dinamik olmayı bırakıp bırakmadığı araştırılmamıştır. Yukarıda keşfettiğimiz ana şey, başlatmadan sonra bildirilen dizinin belirli bir boyut kazanmasıdır.

Açık başlatmanın bir sonucu olarak dinamik bir dizinin dinamik olmaktan çıktığını söylemek istiyorsunuz, yani. dinamik durumunu ve özelliklerini kaybeder mi? - Belki bu yüzden. Ama bundan şüpheliyim. Soru: Çift f[] dinamik dizisi hangi temelde (neden) bir olmaktan çıkıyor?

 
Yedelkin :

double f[] kendisi dinamik bir dizidir. Yaratılışta ilan edilen odur. Son bir başlatma dizisi ile başlatmadan sonra dinamik olmayı bırakıp bırakmadığı araştırılmamıştır. Yukarıda öğrendiğimiz ana şey, başlatmadan sonra bildirilen dizinin belirli bir boyut kazanmasıdır.

Açık başlatmanın bir sonucu olarak dinamik bir dizinin dinamik olmaktan çıktığını söylemek istiyorsunuz, yani. dinamik durumunu ve özelliklerini kaybeder mi? - Belki bu yüzden. O zaman soru şu: neden?

Mesele şu ki, biz MKL'de gerçek durumlardan biraz "izole edilmişiz")), böyle bir durumda derleyici bizim için karar verir. Eğer görürse:

 double f[5];
double f[] = { 0 , 1 , 3 };

statik bir dizi oluşturur (yeniden boyutlandırılamaz). Eğer görürse:

 double f[];

global bellekte bir yapı MqlArrayObject (bir dinamik dizi gibi davranır) oluşturur. Bu nedenle, bildirimden sonra bir dizi başlatamazsınız ( double f[]; f = {6};)

Not: yazılan her şey benim IMHO'm, bir yerde yanılıyor olabilirim.

 

Çaydanlıktan gelen soru: Derleyici satırı görürse gerçekten öyle mi?

 double f[] = { 0 , 1 , 3 };

daha sonra başlangıçta dinamik değil, statik bir dizi mi yarattınız?

Ayrıca bir kural vardır: " Bir dinamik dizi ( ilk köşeli parantez çiftinde belirtilmemiş bir değere sahip bir dizi) bildirirken, derleyici otomatik olarak bir yapı değişkeni struct MqlArrayObject (dinamik dizi nesnesi) oluşturur ve uygun başlatma için kod sağlar ." Yoksa bir son başlatma dizisinin varlığı, "dizinin tüm önemli boyutlarını açıkça belirtmek" anlamına mı geliyor ve statik bir dizinin oluşturulmasına mı yol açıyor?

 
Yedelkin :

Çaydanlıktan gelen soru: Derleyici satırı görürse gerçekten öyle mi?

daha sonra başlangıçta dinamik değil, statik bir dizi mi yarattınız?

Ayrıca bir kural vardır: " Bir dinamik dizi ( ilk köşeli parantez çiftinde belirtilmemiş bir değere sahip bir dizi) bildirirken, derleyici otomatik olarak bir yapı değişkeni struct MqlArrayObject (dinamik dizi nesnesi) oluşturur ve uygun başlatma için kod sağlar ." Yoksa bir son başlatma dizisinin varlığı, "dizinin tüm önemli boyutlarını açıkça belirtmek" anlamına mı geliyor ve statik bir dizinin oluşturulmasına mı yol açıyor?

Kontrol etmek zor mu?

;)

 
MetaDriver :

Kontrol etmek zor mu?

;)

Şu anda zayıf. Sadece akşamları terminale gideceğim. Aksi takdirde 220Volt için cevabım anladığınız gibi farklı olurdu :) Dizin'de bilgi bulamadım. Belki kötü ama titizlikle araştırdım.
 
Yedelkin :
Şu anda zayıf. Sadece akşamları terminale gideceğim. Aksi takdirde 220Volt için cevabım anladığınız gibi farklı olurdu :) Dizin'de bilgi bulamadım. Belki kötü ama titizlikle araştırdım.

Tamam, indim. :) Ben de terminalden çıktım.

Temel olarak kontrol edilir - ArrayResize (...)

Документация по MQL5: Операции с массивами / ArrayResize
Документация по MQL5: Операции с массивами / ArrayResize
  • www.mql5.com
Операции с массивами / ArrayResize - Документация по MQL5