• 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?

0 głosów
424 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,630 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,360 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,700 wizyt
pytanie zadane 1 stycznia 2020 w C i C++ przez Adrian234 Nowicjusz (120 p.)
0 głosów
1 odpowiedź 298 wizyt
pytanie zadane 16 stycznia 2023 w C i C++ przez polandonion Dyskutant (7,680 p.)
+1 głos
1 odpowiedź 448 wizyt
pytanie zadane 13 kwietnia 2022 w C i C++ przez Szanti 2.0 Nowicjusz (150 p.)

93,631 zapytań

142,553 odpowiedzi

323,056 komentarzy

63,139 pasjonatów

Advent of Code 2025

Top 15 użytkowników

  1. 2900p. - dia-Chann
  2. 2870p. - DziarnowskiJ
  3. 2827p. - Łukasz Piwowar
  4. 2783p. - raydeal
  5. 2713p. - rucin93
  6. 2579p. - Łukasz Eckert
  7. 2529p. - Adrian Wieprzkowicz
  8. 2459p. - CC PL
  9. 2184p. - Maurycy W
  10. 2082p. - Michal Drewniak
  11. 1885p. - robwarsz
  12. 1811p. - rafalszastok
  13. 1600p. - Rafał Trójniak
  14. 1588p. - Tomasz Bielak
  15. 1494p. - ssynowiec
Szczegóły i pełne wyniki

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

Kursy INF.02 i INF.03
...