C: Mit jelent: while (--i); ?
C nyelvben e ciklusfeltétel mit jelent?
while (--i);
Mikor lép ki, ha "i" csökken?
"... de vigyázz mert ez prefix"
Ezt hogy érted?
Ilyenkor miért nem jelzik egyértelműen a "nullával való nem egyenlőséget"?
prefix = először csökkenti a változó értékét és aztán ellenőrzi.
Ennek:
int i = 10;
while(--i) { printf("i = %d\n", i); }
Ez a kimenete:
i = 9
i = 8
i = 7
i = 6
i = 5
i = 4
i = 3
i = 2
i = 1
"Ilyenkor miért nem jelzik egyértelműen a "nullával való nem egyenlőséget"?"
C-ben a nullától különböző numerikus érték igazra értékelődik ki, a nulla hamisra.
Csökkenti eggyel i-t; ha nem 0, végrehajtja a ciklustörzset; majd ismétel.
Jelenleg, mivel a ciklustörzs üres, semmi haszna nem volt ezt így írni; az egész sor hatása annyi, hogy nullává teszi i-t.
Mondjuk ezt írhattad volna az elején is.
Ennek:
int i = 10;
do {
printf("i = %d\n", i);
} while (--i);
Ez az eredménye;
i = 10
i = 9
i = 8
i = 7
i = 6
i = 5
i = 4
i = 3
i = 2
i = 1
Ennek viszont:
int i = 10;
do {
printf("i = %d\n", i);
} while (i--);
Ez az eredménye;
i = 10
i = 9
i = 8
i = 7
i = 6
i = 5
i = 4
i = 3
i = 2
i = 1
i = 0
1) C nyelvben, minden, ami nem NULL vagy 0, az true logikai értéknek felel meg. Az említett két érték pedig a false.
Tehát ez:
int i = 6;
if (i) {...}
azt jelenti, hogy:
int i = 6;
if (i != 0) {...}
2) A --i és az i-- között az a különbség, hogy az i-- utoljára hajtódik végre, míg a --i először. Azaz, ha van egy ilyen kódod:
if (i-- == 0) { do_something(); }
az ezt jelenti:
if (i == 0) { i = i - 1; do_something(); }
De ha ilyen kódod van:
if (--i == 0) { do_something(); }
az pedig ezt jelenti:
i = i - 1;
if (i == 0) { do_something(); }
Ebből kifolyólag ez a kód:
do {
do_something();
}
while (--i);
Ezt jelenti:
do {
do_something();
i = i - 1;
} while (i != 0);
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!