Smerniky v Ccku

Programovacie jazyky, rady, poradňa...
dunno
Star
Star
Príspevky: 622
Registrovaný: 17 júl 2014, 11:04
Bydlisko: KE

Smerniky v Ccku

Príspevok od používateľa dunno »

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 ?
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Re: Smerniky v Ccku

Príspevok od používateľa BX »

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?
harrison314
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 8219
Registrovaný: 27 máj 2009, 20:42
Bydlisko: Bratislava
Kontaktovať používateľa:

Re: Smerniky v Ccku

Príspevok od používateľa harrison314 »

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
dunno
Star
Star
Príspevky: 622
Registrovaný: 17 júl 2014, 11:04
Bydlisko: KE

Re: Smerniky v Ccku

Príspevok od používateľa dunno »

snazim sa pochopit jeden program, v ktorom su pouzite smerniky.

A co to znamena ked su 2 hviezdicky ?
harrison314
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 8219
Registrovaný: 27 máj 2009, 20:42
Bydlisko: Bratislava
Kontaktovať používateľa:

Re: Smerniky v Ccku

Príspevok od používateľa harrison314 »

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).
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Re: Smerniky v Ccku

Príspevok od používateľa BX »

harrison314 napísal:ze z najvetcou pravdepdobnostou ide o dvojrozmerne dynmicky alokovane pole
...alebo často dynamické pole štruktúr.

Dunno, keď tak daj časť programu, ktorú nechápeš.
dunno
Star
Star
Príspevky: 622
Registrovaný: 17 júl 2014, 11:04
Bydlisko: KE

Re: Smerniky v Ccku

Príspevok od používateľa dunno »

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 ?
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Re: Smerniky v Ccku

Príspevok od používateľa BX »

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.
dunno
Star
Star
Príspevky: 622
Registrovaný: 17 júl 2014, 11:04
Bydlisko: KE

Re: Smerniky v Ccku

Príspevok od používateľa dunno »

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 ?
harrison314
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 8219
Registrovaný: 27 máj 2009, 20:42
Bydlisko: Bratislava
Kontaktovať používateľa:

Re: Smerniky v Ccku

Príspevok od používateľa harrison314 »

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)
dunno
Star
Star
Príspevky: 622
Registrovaný: 17 júl 2014, 11:04
Bydlisko: KE

Re: Smerniky v Ccku

Príspevok od používateľa dunno »

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
Hardcore addict
Používateľov profilový obrázok
Príspevky: 8219
Registrovaný: 27 máj 2009, 20:42
Bydlisko: Bratislava
Kontaktovať používateľa:

Re: Smerniky v Ccku

Príspevok od používateľa harrison314 »

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
dunno
Star
Star
Príspevky: 622
Registrovaný: 17 júl 2014, 11:04
Bydlisko: KE

Re: Smerniky v Ccku

Príspevok od používateľa dunno »

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
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Re: Smerniky v Ccku

Príspevok od používateľa BX »

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
dunno
Star
Star
Príspevky: 622
Registrovaný: 17 júl 2014, 11:04
Bydlisko: KE

Re: Smerniky v Ccku

Príspevok od používateľa dunno »

Vdaka chlapci, mam v tom jasnejsie :)
Napísať odpoveď