**Feladat 1:** Próbáljuk ki a következő kódot és magyarázzuk meg a hiba okát. #include int main() { { int a = 10, b = 20; } { printf("a = %d, b = %d\n", a, b); } } Megoldás: az //a// és //b// változók nem léteznek a második blokkban. ---- **Feladat 2:** Figyeljük meg, hogyan kezeli a **C** nyelv a blokkokat. Két kapcsos zárójel közötti utasításokat 1 blokknak kell tekinteni. Mi lesz a kimenete a következő kódnak és miért? #include int main() { int n = 1; { int n = 2; printf("%d\n", n); } printf("%d\n", n); } Megoldás: hiába azonosak a változónevek //n//, a C nyelv a blokkon belül egyedileg kezeli, így a külső //n// más értéket fog tartalmazni. ---- **Feladat 3:** Miért nem növekszik az x minden ciklusban? #include int main() { for (int i = 0; i < 3; i++) { int x = 0; x++; printf("%d ", x); } return 0; } Megoldás: mert a ciklusban int x = 0; mindig újra inicializálja. ---- **Feladat 4:** Milyen sorrendben írja ki a számokat? #include int main() { int x = 1; { x = 2; { int x = 3; printf("%d ", x); } printf("%d ", x); } printf("%d\n", x); } Megoldás: 3, 2, 2 ---- **Feladat 5:** Miért kapunk hibás eredményt? #include int main() { int n = 5; { int n = n + 1; printf("%d\n", n); } } Megoldás: undefined behavior (nem definiált viselkedés). A C szabályai szerint az új változó inicializálása előtt még nem létezik, tehát a //n// a jobb oldalon még nem a külső //n//-t, hanem az éppen most definiálás alatt álló (még nem inicializált) //n//-t jelenti ---- **Feladat 6:** Mi lesz a két kiírt szám és miért? #include int main() { int a = 5; int b = 10; { int b = a + 1; printf("%d ", b); } printf("%d\n", b); } Megoldás: 6, 10 ---- **Feladat 7:** Miért változik meg az a értéke, pedig a módosítás egy belső blokkban történt? #include int main() { int a = 5; { int *p = &a; *p = 10; } printf("%d\n", a); } Megoldás: a pointer //p// közvetlenül a memóriába ír. ---- **Feladat 8:** Melyik sor melyik x-re hivatkozik? #include int x = 100; int main() { int x = 10; { extern int x; printf("%d ", x); } printf("%d\n", x); } Megoldás: extern int x; a globális változóra vonatkozik