Informatika2-2013/Gyakorlat05
A MathWikiből
(Változatok közti eltérés)
(Új oldal, tartalma: „== Ismétlés == * Függvények, pl: <c> double atlag(double a, int b){ double x; x = (a + b) / 2; return x; </c> * Írtunk hatványozó függvényt, és e…”) |
|||
52. sor: | 52. sor: | ||
... | ... | ||
</c> | </c> | ||
+ | * A memóriafoglalás rész kifejtve: | ||
+ | ** int *vec -el létrehozunk egy int pointert | ||
+ | ** le szeretnénk foglalni m darab int-nyi helyet, a sizeof(int) visszaadja az int méretét byte-okban | ||
+ | ** m * sizeof(int) megadja mennyi byte kell a tömbhöz | ||
+ | ** malloc(m * sizeof(int)) lefoglal ekkora részt a memóriában és visszaadja az erre a területre mutató pointert | ||
+ | ** de amit visszaad az egy void pointer! (hogy más típusú tömböknél is lehessen használni) | ||
+ | ** ezért az (int *)-al ezt a void * -ot átkonvertáljuk int * típusúvá | ||
+ | |||
+ | * Itt megjelent egy új dolog a típuskonverzió, másnével castolás, pl: | ||
+ | <c> | ||
+ | ... | ||
+ | int a = 2; | ||
+ | int b = 4; | ||
+ | double c = a / (double)b; | ||
+ | ... | ||
+ | </c> | ||
+ | * Ez jól fog értéket adni c-nek, 0.5-öt, annak ellenére hogy '''a''' és '''b''' is int-ek. | ||
+ | * A b-t double-é castoljuk (ez még az osztás elõtt megtörténik), így egy egész lesz osztva egy double-el aminek már double az értéke. |
A lap 2013. március 12., 03:15-kori változata
Ismétlés
- Függvények, pl:
double atlag(double a, int b){ double x; x = (a + b) / 2; return x;
- Írtunk hatványozó függvényt, és egy olyan függvényt ami tömböt kapott bemenetként, így lehet tömböt átadni függvénynek (vagy pointerrel):
void fv(int t[], int v){...}
- Pointerek:
- Megtanultunk pointereket használni, melyekkel közvetlenül a memóriát kezelhetjük, így változók értékét már függvényekkel is tudjuk módosítani.
int *p; // Létrehozunk egy int pointert p névvel int a = 5; p = &a; // Az a változó pointerét eltároljuk p-ben scanf("%d", p); // Így például az a változóba olvasnánk be printf("%d", *p); // Ezzel pedig az a értékét írnánk ki *p = 15; // Pointeren keresztül értéket is átírhatunk printf("%d", a); // Így ez mostmár 15-öt adna ki
- Azt is megtudtuk, hogy a tömbök pointerek, és nem tudjuk lekérni a méretüket, mert maga a program sem tárolja a méretüket, errõl nekünk kell gondoskodnunk.
- Átírtuk a hatványozó függvényünket, hogy pointereken keresztül kapja az értékeket, majd mégjobban átírtuk hogy egy pointer segítségével az eredményt egy változóba másolja.
Dinamikus memória foglalás
- Függvények:
- malloc megadott byte-ot foglal le a memóriában,
- realloc a már lefoglalt memória-tömb méretét változtatja meg,
- calloc memóriafoglalás és a lefoglalt memória byte-jainek 0-ra állítása egyben,
- free üríti a megadott memória-részt.
- Példa malloc és free-re:
... int i; // ciklusváltozónak int m; // ebbe olvassuk be a tömb méretét scanf("%d",&m); int *vec = (int *)malloc(m * sizeof(int)); // itt foglaljuk le a memóriát a tömbnek ... for(i=0; i<M; i++){ vec[i]=i*i; // majd feltöltjük a tömböt az indexek négyzetével } ...
- A memóriafoglalás rész kifejtve:
- int *vec -el létrehozunk egy int pointert
- le szeretnénk foglalni m darab int-nyi helyet, a sizeof(int) visszaadja az int méretét byte-okban
- m * sizeof(int) megadja mennyi byte kell a tömbhöz
- malloc(m * sizeof(int)) lefoglal ekkora részt a memóriában és visszaadja az erre a területre mutató pointert
- de amit visszaad az egy void pointer! (hogy más típusú tömböknél is lehessen használni)
- ezért az (int *)-al ezt a void * -ot átkonvertáljuk int * típusúvá
- Itt megjelent egy új dolog a típuskonverzió, másnével castolás, pl:
... int a = 2; int b = 4; double c = a / (double)b; ...
- Ez jól fog értéket adni c-nek, 0.5-öt, annak ellenére hogy a és b is int-ek.
- A b-t double-é castoljuk (ez még az osztás elõtt megtörténik), így egy egész lesz osztva egy double-el aminek már double az értéke.