Hatalar, hatalar, sorular - sayfa 2889

 
A100 :

Senin rastgele numaran 0, benimki 540016640

ama yine de rastgele

MQ'nun sıfırlandığını zaten düşündüm.

 
Roman :

MQ'nun sıfırlandığını zaten düşündüm.

Global değişkenlerle sıfıra başlatılmış gibi görünüyorlar, ancak işlevler gövdesinde ilk geçişte farklı başlatmalarla karşılaştım. Kullanmadan önce her zaman başlatmaya çalışırım. Kabul etsem de, davranış açık olmalıdır.

Ve döngü gövdesindeki parantez içindeki başka bir bildirim, değişkeni döngü için yerel yapar. olduğu gibi kabul ediyorum. Sadece belgelerde yok.

 
Roman :

Ayrıca derleyici, bir değişkenin başlatılmadığı konusunda uyarmaz .

Print(...), parametre const olmayan bir referans tarafından geçirilmiş gibi uyarı vermeyebilir

 int f( int & i ) { return i; }
void OnStart ()
{
         int i;  
        f( i ); //нормально
}
 
A100 :

Döngüler aynıysa, derleyicinin davranışı aynı olmalıdır, ancak farklıdır. Hata burada yatıyor. (1) durumunda neden bir uyarı olduğunu açıkladınız, ardından (2) durumunda neden olmadığını açıkladınız mı? Temelde ne değişti? Ve sonra, başlatılmamış bir değişken kullanılıyorsa, o zaman yürütüldüğünde nihai sonuç neden doğrudur - bu durumda rastgele bir sayı olmalıdır.

Böyle bir bilim-mantık var. A ve B aynıysa ve A kırmızıysa, B yeşil değil kırmızı olmalıdır.

Programcı olmak için çalışmadım, Vasily Ivanovich ve Petka'nın mantık hakkında nasıl konuştuklarını sadece mantıklı bir şekilde anlayabilirim.

İlk durumda, tüm satır yürütülür

 for ( int i = 0 , j; i < 10 ; i = j )

ve burada j değişkeni başlatılmaz , ancak değeri i değişkenine atanır

İkinci durumda, j değişkeni başlatılmamış olmasına rağmen, kullanıldığı sonraki satırda ona bir değer atanmaz, ona bir değer atanır. Başka bir deyişle, j değişkeni, i değişkeninin değeri ile başlatılır.

İşte uyarısız bir sürüm

   for ( int i = 0 , j; i < 10 ; j = i )
   {
    j = i+ 1 ;
   }
 
Alexey Viktorov :

Programcı olmak için çalışmadım , Vasily Ivanovich ve Petka'nın mantık hakkında nasıl konuştuklarını sadece mantıklı bir şekilde anlayabilirim.

İlk durumda, tüm satır yürütülür

ve burada j değişkeni başlatılmaz , ancak değeri i değişkenine atanır

Ve kim okudu? Bence buradaki çoğu (benim gibi) kendi kendini yetiştirmiş

Eylemlerin sırasını anlamak için for döngüsü ifadesini incelemeniz gerekir. (1). durumda, j değişkenine i+1 değeri atanır.

j = i+ 1

atama operatörünün sağında görünmeden önce

i = j
 
Valeriy Yastremskiy :

Global değişkenlerle sıfıra başlatılmış gibi görünüyorlar, ancak işlevler gövdesinde ilk geçişte farklı başlatmalarla karşılaştım.
Kullanmadan önce her zaman başlatmaya çalışırım. Kabul etsem de, davranış açık olmalıdır.

Ve döngü gövdesindeki parantez içindeki başka bir bildirim, değişkeni döngü için yerel yapar. olduğu gibi kabul ediyorum. Sadece belgelerde yok.

Evet, ayrıca her zaman değişkenleri başlatırım, iki kez iki gibi, her zaman hatırlamalıyım.
C dilinden kafaya sürülür))
Bu nedenle, başlatılmamış bir değişkene sahip bu döngü örneği kötü bir uygulamadır.

 
Roman :

Evet, ayrıca her zaman değişkenleri başlatırım, iki kez iki gibi, her zaman hatırlamalıyım.
C dilinden kafaya sürülür))
Bu nedenle, başlatılmamış bir değişkene sahip bu döngü örneği kötü bir uygulamadır.

Başlatmanız gerekir, ancak yalnızca anlamlı bir değerle. Bu örnekte, böyle bir değer yoktur, bu nedenle uygulama kötü değil, mümkün olan tek şeydir. Aksi takdirde çift başlatma olur

 int f( int i ) { /*вычисления*/ }
void g( int k )
{
         for ( int i = 0 , j; i < k; i = j )
        {
                j = f( i );
                 /*вычисления*/
        }
}
 
A100 :

Başlatmanız gerekir, ancak yalnızca anlamlı bir değerle. Bu örnekte, böyle bir değer yoktur, bu nedenle uygulama kötü değil, mümkün olan tek şeydir. Aksi takdirde çift başlatma olur

Ve ne değişecek? başlatılırsa

 int f( int i ) { /*вычисления*/ }
void g( int k )
{
   for ( int i= 0 , j= 0 ; i < k; i = j )
   {
      j = f( i );
       /*вычисления*/
   }
}       
 
Roman :

Ve ne değişecek? başlatılırsa

Ve neden j=333 değil de sıfır kabul edilebilir? Onlar. bu, ince bir hatayı gizleyebilen anlamsız bir başlatmadır

 
A100 :

Ve neden 333 değil de sıfır kabul edilebilir? Onlar. bu, ince bir hatayı gizleyebilen anlamsız bir başlatmadır

Bu değerin bir hatasını yakalamanız gerekiyorsa, peki, 333 ile başlatın ))
Bu sadece başlangıç değeridir.