Mohol by niekto vysvetliť, prečo mi to vypíše 32 a celkovej koncepcie ako to funguje?
#include <stdio.h>
int main()
{
int a=1;
for (printf ("3"); printf ("2"); printf ("1"))
return 0;
}
Mohol by niekto vysvetliť, prečo mi to vypíše 32 a celkovej koncepcie ako to funguje?
#include <stdio.h>
int main()
{
int a=1;
for (printf ("3"); printf ("2"); printf ("1"))
return 0;
}
Správne odsadenie by to jasnejšie:
#include <stdio.h>
int main()
{
int a=1;
for (printf ("3"); printf ("2"); printf ("1"))
return 0;
}
Takže nasledujúce deje:
a
je inicializovaný 1
. Neviem, prečo táto premenná existuje, pretože sa nikdy použité.for
vykonáva jeho inicializácie ziskov a strát, printf("3");
. Vytlačí 3
.for
hodnotí jej opakovaní stave, printf("2")
. Vytlačí 2
a vráti počet znakov, ktoré boli vytlačené, ktorý je 1
.return 0;
. To sa vráti z main()
teda ukončenie slučky.Od slučky končí, nikdy sme sa hodnotí aktualizácia prejavu, printf("1")
, tak to nikdy výtlačkov 1
. A my si žiadne opakovanie nič.
Viete, program začína plynúť od ľavej '{' z funkcie main(), konci v pravom '}' z funkcie main(), ak nie je nekonečné slučky.
Ako váš kód ukazuje, Vaše ťažkosti je pochopiť priebeh pre slučky v C jazyku.
for (initializationStatement; testExpression; updateStatement)
{
// statements inside the body of loop
for loop body;
}
1.Inicializačný vyhlásenie sa vykoná iba raz.
2.Potom, test výraz je vyhodnotený. Ak test výraz je vyhodnotený na hodnotu false, pre slučky je ukončená.
3.Ak však test výraz vyhodnotí na true, závierke vo vnútri tela pre slučky sa vykonávajú, a aktualizovať termín je aktualizovaný.
4.Opäť test výraz je vyhodnotený.
Tento proces pokračuje, až kým test výraz je false. Pri skúške výraz je false, slučka zaniká.
#include <stdio.h>
int main(){
for (printf ("3"); printf("2"); printf("1")) break;
return 0;
}
32
1.inicializácia je "printf ("3")
"a potom, tlač:
3
2.Test výraz "printf("2")
", ktorý je vždy pravdivý, tak tlače:
2
3.pre telo slučky "break
"znamená to, že sa končí vykonaním pre slučky,
nie vykonanie aktualizovaný výraz "printf("1")
"
tiež, program skočiť z pre slučky, a skok "return 0;
",
potom, ukončiť realizáciu tohto programu.
Tak, výstup je
32
#include <stdio.h>
int main(){
for (printf ("3"); printf("2"); printf("1")) ;
return 0;
}
321212121212121212...121212...1212...
Podobne,
1.inicializácia je "printf ("3")
"a potom, tlač:
3
2.Test výraz "printf("2")
", ktorý je vždy pravdivý, tak tlače:
2
3.pre telo slučky "`", prázdne, potom nič. goto aktualizovaný výraz
"printf("1")
"
4.aktualizované vyjadrenie "printf("1")
"a potom, tlač
1
5.potom goto test vyjadrenie "printf("2")
", že je "2.Test
výraz "printf("2")", ktoré vždy pravda, tak tlače".Pretože
telo slučky je "`",prázdne, potom vždy goto z aktualizovanej
výraz "printf("1")
" na test vyjadrenie "printf("2")
",
to je dôvod, prečo po vytlačení "32
"že funkcia vytlačí nekonečnej slučke
"12
".A túto funkciu nikdy koniec zastaviť tlač "12
"ak ste
zastaviť túto funkciu.
Tak, Tak, Tak, výstup je
32121212...121212...121212...
#include <stdio.h>
int main()
{
int a=1;
for (printf ("3"); printf ("2"); printf ("1"))
return 0;
}
32
1.program začína plynúť od ľavej '{' z funkcie main(),
to je inicializácia vyhlásenie Dočasnej premennej
"int a=1;
".
Vyhlásenie, že definuje "int
"napísal dočasnej premennej "a
"a
nastaví jeho hodnotu na "1
", Ale že tlačiť nič!
2.potom, program goto pre slučky.
3.inicializačný vyhlásenie "printf ("3")
"a potom, tlač
"3
"a
goto test prejavu.
3
4.Test výraz "printf("2")
", ktorý je vždy pravdivý, tak
tlačiť "2
"a goto pre slučky telo prejavu.
2
5.pre slučky telo vyjadrenie "return 0
"termín
"return 0
"vrátenia"0
"do funkcie main(),a koniec
výkon main(), Ale tlače nič.
Tak, výstup je:
32