• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Deklarowanie zmiennych w pętli czy poza?

Aruba Cloud - Virtual Private Server VPS
0 głosów
283 wizyt
pytanie zadane 8 marca 2022 w C i C++ przez Daaa22 Dyskutant (8,250 p.)

Zdaje sobie sprawę że takie pytania już były ale chce wiedzieć czy tak samo jest z zagnieżdżonymi pętlami. Przykładowy kod:

for( int i = 0; i < 1000; i++ )
{
if( i % 3 == 1)
{
for( int j = 0; j < 1000; j++ )
{
double t;
t = i * j;
cout << t << endl;
}
}
else cout << i << endl;
}

Wiem że jeżeli zmienna jest deklarowana wewnątrz jednej pętli to tylko w niej jest widoczna, ale czy w tym kodzie co ja napisałem za każdym razem gdy i%3==1 od nowa powstaje zmienna t i po zakończeniu pętli ona znika? Co się wtedy dzieje?

2 odpowiedzi

+3 głosów
odpowiedź 9 marca 2022 przez Utlamo Obywatel (1,540 p.)
wybrane 9 marca 2022 przez Daaa22
 
Najlepsza

To C/C++ co oznacza że znikają w czasie działanie programu tylko wskaźniki.
Kurs C++ odc. 10: Wskaźniki. Dynamiczne alokowanie pamięci Pasja informatyki
https://www.youtube.com/watch?v=0DQl74alJzw
Jeżeli wszystko działa jak powinno to oznacza że kompilator przerzuca ci delkaracje zmiennej na początek programu, ale to zależy od ustawień środowiska.
Jeżeli miałeś coś takiego że pobierasz kod z Gita i tobie nie działa to są właśnie takie praktyki :/
Niby to ci nic nie zmienia ale lepiej się tak nie uczyć bo wejdzie ci w krew, a nie wiadomo z kim przyjdzie ci pisać jakiś kod w przyszłości.
Po za tym zastanawiam się czy nie wystarczyłoby zamiast

double t;

t = i * j;

cout << t << endl;

użyć

cout << i * j << endl;

Wynik daje w int bo 2 inty mnożysz, ale jakbyś chciał koniecznie na wyjściu double to

cout << i * (double)j << endl;

komentarz 9 marca 2022 przez Daaa22 Dyskutant (8,250 p.)
pewnie że tak lepiej, ale chciałem jak najprostszy kod napisać który by pokazywał z czym dokładnie mam problem. Czyli odpowiedź na moje pytanie zależy od kompilatora?
komentarz 10 marca 2022 przez Utlamo Obywatel (1,540 p.)
Albo jest jedna zmienna na początku i usuwana jest na końcu, albo kod nie działa.
+1 głos
odpowiedź 9 marca 2022 przez overcq Pasjonat (22,400 p.)

Z kodu asemblera wynika, że

  • przy wyłączonej optymalizacji zmienna t jest przechowywana w rejestrze
  • przy włączonej optymalizacji mnożenie jest zamieniane na dodawanie do zmiennej też przechowywanej w rejestrze

 

1
komentarz 9 marca 2022 przez Oscar Nałogowiec (29,340 p.)
Czyli umieszczenie deklaracji wewnątrz lub na zewnątrz pętli nic nie zmienia w kodzie, to nie jest obiekt z jakims nie trywialnym konstruktorem, więc jedynie "pusty kod" jest przemieszczany. Nic nie jest wykonywane dla stworzenia lub usunięcia zmiennej t.

Podobne pytania

0 głosów
2 odpowiedzi 1,404 wizyt
pytanie zadane 1 stycznia 2020 w C i C++ przez Adrian234 Nowicjusz (120 p.)
0 głosów
1 odpowiedź 229 wizyt
pytanie zadane 16 stycznia 2023 w C i C++ przez polandonion Dyskutant (7,560 p.)
+1 głos
1 odpowiedź 298 wizyt
pytanie zadane 13 kwietnia 2022 w C i C++ przez Szanti 2.0 Nowicjusz (150 p.)

93,264 zapytań

142,260 odpowiedzi

322,234 komentarzy

62,582 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...