PROFI'den SUPERPROFI'ye kadar tüm sorularınız - 1. - sayfa 3

 
Kutsal sadelik (c) Jan Hus
 
Sorento :
Kutsal sadelik (c) Jan Hus

Ne demek istiyorsun?
 
drknn :

Ne demek istiyorsun?

O kadar basit değil.

şimdi fonksiyonun içinde - geçirilen değişkenle çalışın.

Mathmech'in bize öğrettiği gibi - eğer adreste bir sahte değişkene ihanet ettiyseniz - içindeki tüm mucizeler ele alındı.

Ancak adres havuzu sabitlerle sıralanırsa her şey farklı olacaktır.

0, 1 olur ve bunun tersi de geçerlidir.

;)

 
Bir EA/gösterge/komut dosyasında bir değişkeni adrese göre iletmek gibi neden bu tür karmaşıklıklara ihtiyacınız var? Sözde değişken, adres havuzu ve sabitlere göre hizalama terimleriyle ne demek istiyorsunuz?
 
drknn :
Bir EA/gösterge/komut dosyasında bir değişkeni adrese göre iletmek gibi neden bu tür karmaşıklıklara ihtiyacınız var? Sözde değişken, adres havuzu ve sabitlere göre hizalama terimleriyle ne demek istiyorsunuz?

derleyiciler ve yorumlayıcılar benzerdir.

Bu nedenle, düşünün.

parametreler (değişkenler) nasıl geçirilir? ve işleve bir ifade iletilirse..

;)

 
Sorento :

Şüphelerimi paylaşacağım.

Süper profesyonellere bağlı değilim, profesyonellere ulaşmıyorum - kimse mesajları okumuyor ... ata açık.

Ancak ne kadar çok kod yazarsam (henüz yeterli değil) - soru ortaya çıkıyor:

Fonksiyonlarda parametreler nasıl geçirilir?

(isme göre mi, değere göre mi?)

dize değişkenlerinin iletildiğinde pervasız olduğuna dair bir şüphe var ...

;)


Kendimi profesyonel veya süper profesyonel olarak görmesem de cevaplamaya çalışacağım :).

MT, C\C++'da uygulanır ve geliştiricilerin belirsizlik durumunda bu dilin standartlarına başvurmaları önerilir.

C\C++ standardına göre, diziler dışındaki tüm parametreler, ifadeler dahil, değere göre iletilir. Yani, parametrelerin kopyaları iletilir: çağrılan fonksiyonun içindeki değere göre geçirilen parametrenin değiştirilmesi, dış çağırandaki parametreyi değiştirmez. Değişikliğin gerçekleşmesini istiyorsanız, bunu referansla (adreste) iletmeniz gerekir - yani adres, değişkenin bulunduğu yere iletilir, parametre olarak iletilir. Ardından bu adreste bulunan değeri değiştirebilirsiniz, ancak adresin kendisini değiştiremezsiniz. Tüm diziler referans yoluyla iletilir - yani adresler bir kerede iletilir: aksi takdirde yığın üzerinden çok büyük miktarda verinin kopyalanması gerekir.

Çağrılan fonksiyon içinde referansla geçirilen parametrenin değiştirilmesini engellemek için C\C++ const değiştiricisini kullanır.

C\C++'da dizeler karakter dizileridir, bir farkla - böyle bir dizi bir satır sonlandırıcı '\0' ile bitmelidir.

MKL'de bir dize, örneklere göre bir uzunluk ve bir dizeye (yani dize dizisinin kendisine) yönelik bir işaretçi içeren bir yapıdır.

C\C++ için örnek:

 //----
struct MqlStr
  {
   int                len;
   char              * string ;
  };

Burada char *, bir karakter tipi değişkenine (char tipi) bir işaretçidir. İşaretçi türünün kendisi (char*, int*, double*.......) her zaman tamsayıdır - bu, hücrenin adresidir. Bu, değişkenin bir dize değil, bir hücrenin adresini depoladığı anlamına gelir. Sembolün değeri, *string veya string[0] çağrılarak elde edilebilir. Çalışmak için, bir dizi statik olarak tahsis edilmemişse, her zaman bir dizi için bellek ayırmanız gerekir - yani, boyutu açıklamada belirtilmemiştir, örneğin:

karakter dizisi[1025] ;

bu, 1025 öğeden oluşan bir karakter dizisidir.... son karakter (string[1024]='\0') ise, bu durumda böyle bir dizi 1024 karakterlik bir dize olarak ele alınabilir.

Daha sonra dizgenin öğeleri, olağan dizge[i] dizisinin öğeleri olarak elde edilebilir; Dinamik yerleştirme ile satır altına + 1 eleman ayrılır ve satır sonu karakteri en son eklenir .....

Buna göre, dize her zaman referansla iletilir. Değişikliklerinin yasaklanıp yasaklanmadığı, MCL'nin uygulanmasına bağlıdır ve bu bir örnekle kontrol edilebilir: işleve bir dize iletiyoruz, orada değeri değiştiriyoruz ve çağrılan işlev sona erdikten sonra (bu değeri) okuyoruz.

İyi şanlar.

 
VladislavVG :

Buna göre, dize her zaman referansla iletilir. Değişikliklerinin yasaklanıp yasaklanmadığı, MCL'nin uygulanmasına bağlıdır ve bu bir örnekle kontrol edilebilir: işleve bir dize iletiyoruz, orada değeri değiştiriyoruz ve çağrılan işlev sona erdikten sonra (bu değeri) okuyoruz.

Değişiklik yasak değildir. Kontrol.
 
drknn :

Kıçını tekmelemek. Geliştiricilere veya DLL-ke'de bir soru gibi görünüyor, her şey yolunda değil. C ++ ile programlamam - Bir şekilde birkaç prog yapmaya çalıştım, C ++ kabuğunu yüklediğimde her şeyin benim için çalıştığı gerçeğiyle karşılaştım. Ancak, bir tür dll'nin eksikliği hemen tespit edildiğinden, yürütülebilir dosyayı başka bir bilgisayara aktarmak yeterlidir. Ve iplerle çalışmayı sevmiyordum. Bu dili bıraktım ve Delphi'de kaldım. Belki üzerinde kendi DLL'nizi yapmayı deneyebilirsiniz - bu tür dll'ler benim terminalimle oldukça normal bir şekilde arkadaştır ...

not

Bu yüzden, herkesin neden C++'ı bu kadar övdüğünü anlamadım, zaten bu dille programlama için bir kabuk seçme düzeyinde sorunlar var ...

Gerçek şu ki, bu kitaplıklara sahip tüm kitaplıklar ve komut dosyaları, grafiğe manuel olarak yüklendiklerinde iyi çalışır. Ayrıca, mevcut süreçten programlı olarak grafiğe yüklendikleri takdirde de çalışırlar.

Sorun, onları uzak bir işlemden yüklediğinizde ortaya çıkar.

===================================

Kodun başka bir bilgisayara aktarılmasıyla ilgili. Büyük olasılıkla hata ayıklayıcı sürümünü aktardınız. Studio'dan hata ayıklama için kitaplıkları çeker. Yayını derlemem gerekiyordu. O zaman her şey her yerde çalışırdı.

 
Boşuna analoji tarafından çağrılır.
 
TheXpert :
Boşuna analoji tarafından çağrılır.

Aynen öyle. İlk başta bu dalın adının şartlarını bile kaçırdım - isimlerin farklı olduğunu fark etmedim - dikkat zaten belirli bir kalıba çevrildi.