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

Object Storage Arubacloud
0 głosów
222 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 (21,650 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,290 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,093 wizyt
pytanie zadane 1 stycznia 2020 w C i C++ przez Adrian234 Nowicjusz (120 p.)
0 głosów
1 odpowiedź 201 wizyt
pytanie zadane 16 stycznia 2023 w C i C++ przez polandonion Mądrala (6,970 p.)
+1 głos
1 odpowiedź 154 wizyt
pytanie zadane 13 kwietnia 2022 w C i C++ przez Szanti 2.0 Nowicjusz (150 p.)

92,537 zapytań

141,377 odpowiedzi

319,456 komentarzy

61,922 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...