Smerniky v Ccku
Smerniky v Ccku
Chcem sa spytat na smerniky, lebo celkom tomu nechapem.
Mam premennu: int *pole; a potom sa vsade v programe uz pouziva len ako "pole", bez smernika. Naco je to potom dobre to inicializovat ako *pole ?
A este jedna vec, co to znamena ak mam **pole ? Ak su tam dve hvizdicky ?
Mam premennu: int *pole; a potom sa vsade v programe uz pouziva len ako "pole", bez smernika. Naco je to potom dobre to inicializovat ako *pole ?
A este jedna vec, co to znamena ak mam **pole ? Ak su tam dve hvizdicky ?
Re: Smerniky v Ccku
Ak sa učíš polia, tak sa uč polia a na smerníky ešte chvíľu zabudni. Smerník nie je pole.
Ak sa učíš smerníky a snažíš sa ich pochopiť, polia nie sú dobrá pomôcka.
Takže čo z toho?
Ak sa učíš smerníky a snažíš sa ich pochopiť, polia nie sú dobrá pomôcka.
Takže čo z toho?
-
harrison314
Hardcore addict
- Príspevky: 8217
- Registrovaný: 27 máj 2009, 20:42
- Bydlisko: Bratislava
- Kontaktovať používateľa:
Re: Smerniky v Ccku
Zle tomu chapes * neznamena smernik.
* je operator, pri deklaracii hovori, ze deklarujes mernik.
Pri pouziti znamena derefernciu.
int *ptr; // deklarujes pointer na typ int
int pozicia = (int) ptr; // do pozicia ulozis adresu na ktoru smernik ukazuje
int vysledok = *ptr; // do vysledok ulozis hodnotu na drese na ktoru ukazuje smernik
* je operator, pri deklaracii hovori, ze deklarujes mernik.
Pri pouziti znamena derefernciu.
int *ptr; // deklarujes pointer na typ int
int pozicia = (int) ptr; // do pozicia ulozis adresu na ktoru smernik ukazuje
int vysledok = *ptr; // do vysledok ulozis hodnotu na drese na ktoru ukazuje smernik
Re: Smerniky v Ccku
snazim sa pochopit jeden program, v ktorom su pouzite smerniky.
A co to znamena ked su 2 hviezdicky ?
A co to znamena ked su 2 hviezdicky ?
-
harrison314
Hardcore addict
- Príspevky: 8217
- Registrovaný: 27 máj 2009, 20:42
- Bydlisko: Bratislava
- Kontaktovať používateľa:
Re: Smerniky v Ccku
2 hviezdicky znamenaju smernik na smernik, ktori ukazuje na hodnotu.
3 hviezdicky su smernik, na smernik, na smerrnik, ktory ukazuje na hodnotu.
Osobnesi myslim, ze z najvetcou pravdepdobnostou ide o dvojrozmerne dynmicky alokovane pole (pretoze som takto pozival smernik na smernik najcastejsie).
3 hviezdicky su smernik, na smernik, na smerrnik, ktory ukazuje na hodnotu.
Osobnesi myslim, ze z najvetcou pravdepdobnostou ide o dvojrozmerne dynmicky alokovane pole (pretoze som takto pozival smernik na smernik najcastejsie).
Re: Smerniky v Ccku
...alebo často dynamické pole štruktúr.harrison314 napísal:ze z najvetcou pravdepdobnostou ide o dvojrozmerne dynmicky alokovane pole
Dunno, keď tak daj časť programu, ktorú nechápeš.
Re: Smerniky v Ccku
ano je to dvojrozmerne pole s tymi dvoma hviezdickami. Program je o maticiach.
Ale aky to ma vyznam zapisovat to ako **pole a potom dalej pouzivat uz pole[j]= ... ?
A este jedna vec, je tam pouzite aj pole[m] ... takto je brana ktora cast dvojrozmerneho pola ?
Ale aky to ma vyznam zapisovat to ako **pole a potom dalej pouzivat uz pole[j]= ... ?
A este jedna vec, je tam pouzite aj pole[m] ... takto je brana ktora cast dvojrozmerneho pola ?
Re: Smerniky v Ccku
dunno napísal:Ale aky to ma vyznam zapisovat to ako **pole a potom dalej pouzivat uz pole[j]= ... ?
Lebo sa to takto zapisuje. Dynamicky alokované pole v C musíš robiť cez smerníky a na prístup k polu používaš operátor[] rovnako, ako vo veľa iných jazykoch. Prečítaj si, čo ten operátor robí.
dunno napísal:A este jedna vec, je tam pouzite aj pole[m] ... takto je brana ktora cast dvojrozmerneho pola ?
Podľa toho, ako pole dotyčný používa v cykloch. Buď je to m-tý riadok, alebo m-tý stĺpec. Typicky asi skôr riadok.
Re: Smerniky v Ccku
Aha, uz tomu asi rozumiem.
Takze ak alokujem jednorozmerne pole stylom int pole[20]; tak alokujem pole pre 20 prvkov.
A ked ho alokujem ako int *pole; tak neurcim dopredu kolko bude mat prvkov, ale az neskor niekde v programe polocou funkcie malloc si alokujem tolko miesta kolko budem potrebovat, dobre chapem ?
Takze ak alokujem jednorozmerne pole stylom int pole[20]; tak alokujem pole pre 20 prvkov.
A ked ho alokujem ako int *pole; tak neurcim dopredu kolko bude mat prvkov, ale az neskor niekde v programe polocou funkcie malloc si alokujem tolko miesta kolko budem potrebovat, dobre chapem ?
-
harrison314
Hardcore addict
- Príspevky: 8217
- Registrovaný: 27 máj 2009, 20:42
- Bydlisko: Bratislava
- Kontaktovať používateľa:
Re: Smerniky v Ccku
Nie tak celkom.
int *pole; si vytvoris premennu do ktorej mozes ulozit smernik, malloc ti alkokuje miesto v pameti a ty jeho adresu ulozis do premennej a s nou potom pracujes
lebo pole je to iste ako keby napises *(pole+i)
int *pole; si vytvoris premennu do ktorej mozes ulozit smernik, malloc ti alkokuje miesto v pameti a ty jeho adresu ulozis do premennej a s nou potom pracujes
lebo pole je to iste ako keby napises *(pole+i)
Re: Smerniky v Ccku
hm. A ako teda viem spravit neico take ako som popisoval ? Ze napr. mam nejake cisla v subore a chcem aby program tieto cisla nacital a dal do pola. Lenze, program nevie, kolko cisel je v subore ,takze neviem dopredu inicializovat napr. int pole[10]; ... ale potrebujem aby to pole malo tolko prvkov kolko je v subore. Ako to spravit ? (citanie zo suboru viem, ide mi o to pole)
-
harrison314
Hardcore addict
- Príspevky: 8217
- Registrovaný: 27 máj 2009, 20:42
- Bydlisko: Bratislava
- Kontaktovať používateľa:
Re: Smerniky v Ccku
ano ide, napisem ti ten jednoduchsi ale menej efktivny sposob,
otvoris subor a precitas ho, ale nebudes cisla ukladat len ich spocitas, proto zists kolko ich tam je,
potom si alokujes pole cez malloc, a precitas ten subor zas, ale uz budes ukladat cisla do pola,
ten lepsi sposob je cez spajane zoznami, no tam treba tej alkacii dealokacii a smernikom chapat trochu viac
otvoris subor a precitas ho, ale nebudes cisla ukladat len ich spocitas, proto zists kolko ich tam je,
potom si alokujes pole cez malloc, a precitas ten subor zas, ale uz budes ukladat cisla do pola,
ten lepsi sposob je cez spajane zoznami, no tam treba tej alkacii dealokacii a smernikom chapat trochu viac
Re: Smerniky v Ccku
aha, no ten prvy sposob je asi dost neefektivny ... ale rozmyslal som aj nad tym, ze to spravim tak trosku mozno hlupo a tiez neefektivne, ze si inicializujem nejake vacsie pole .. napr pole[100] lebo viem, ze tolko tych prvkom az nebude
Re: Smerniky v Ccku
Harrison zabudol na postupné zväčšovanie poľa, čo je pri napr exponenciálnom zväčšovaní nie až tak náročné aj pre väčšie vstupy. A určite lepšie, ako dopredu alokovať veľa pamäte.
V C máš na toto funkciu realloc
V C máš na toto funkciu realloc
Re: Smerniky v Ccku
Vdaka chlapci, mam v tom jasnejsie 