| | |
| Stránka: 1 z 1
| [ Príspevkov: 14 ] | |
Autor | Správa |
---|
Registrovaný: 07.04.07 Prihlásený: 10.08.10 Príspevky: 171 Témy: 42 Bydlisko: Bratislava |
Nazdar, potreboval by som trochu objasniť funkciu a aký je rozdiel medzi ukazovateľom a odkazom v C++. Akurát sa venujem štúdium a tato kapitola mi robí trochu zmätok v hlave. Tak by som bol vďačný za stručne vysvetlenie a objasnenie. Za pomoc Ďakujem.
_________________ Ten, kto sa pýta, je hlupákom päť minút; ten kto sa nepýta, zostáva hlupákom navždy. |
|
Registrovaný: 16.08.09 Prihlásený: 07.03.14 Príspevky: 186 Témy: 16 Bydlisko: Levice | Napísal pizet: 10.08.2010 12:39 | |
|
Pod odkazom máš na mysli referenciu asi.
Kód: int& i = a; Premenná i je referenciou na a. Akokoľvek narábaš s i, mení sa aj a. Premenná a musí mať l-hodnotu, to jest hodnota, ktorá je "istá", nejaký trvalý objekt. Kód: int b& = i; Prakticky neexistuje referencia na referenciu, lebo b je referencia na a. Pri funkciách máš 3 typy parametrov. Pokiaľ viem. Pr. Kód: int fcia(int premenna) {...} // prekopíruje sa hodnota premennej typu int do premennej premenná.
int fcia(int& premenna) {...} // vytvori sa referencia na argument, ktorý je predaný odkazom. Mení to hodnotu premennej, na ktorú je to referencia.
int fcia(const int& premenna) {...} // len na čítanie...
A čo také ti píšu v knihe, či z kadiaľ sa to učíš, čomu konkrétne nerozumieš?
_________________ "Najlepším spôsobom, ako sa na budúcnosť pripraviť, je vymyslieť si ju." - John Sculley |
|
Registrovaný: 16.08.09 Prihlásený: 07.03.14 Príspevky: 186 Témy: 16 Bydlisko: Levice | Napísal pizet: 10.08.2010 16:30 | |
|
Pointer vlastne reprezentuje adresu, nejakého objektu, napr. premennej.
Tu je to vidno, že po vypísaní pointera, vypíše adresu premennej a da sa to skontrolovať, keď adresu vypíšem pomocou adresového operátora.
Kód: #include <iostream>
int main () { int i = 0; int *p = &i; std::cout << p << std::endl; std::cout << &i << std::endl; return 0; }
_________________ "Najlepším spôsobom, ako sa na budúcnosť pripraviť, je vymyslieť si ju." - John Sculley |
|
Registrovaný: 07.04.07 Prihlásený: 10.08.10 Príspevky: 171 Témy: 42 Bydlisko: Bratislava |
Zobeme si ze mam nejaku funkciu napr. zmen_cisla
V hlavnej funkcii main si deklarujem a inicializuje dve premenne A a B ktorým priradim nejaku hodnotu napr 3 a 5. (su lokalne samozrejme)
A teraz chcem aby sa premenne A a B po zavolani funkcie zmena_cisla navysili napr. o 2 tak musim predat parametre funkcii ako odkaz nie ?
To znamena ze sa nepreda funkcii samotna hodnota ale adresa kde sa tieto dve premenna nachadzaju, vo funkcii sa zmenia hodnoty na tychto adresach ale samotne parametre (adresy a a b) predane funkcii sa nemenia. To v konecnom dosledku znamena ze dojde k zmene tychto cisel.
A to v globalnom ponati. Takze ked vypiseme premennu A a B v main bude ich hodnota zmenena.
A pritom niesme viazany oborom platnosti.
otazka : keby ze nepouzijem odkaz, cisla vo funkcii by sa zmenili ale zmena by sa neprejavila vo funkcii main, a to z toho dovodu ze zmena_cila(a,b) nepracuje primo s premennymi z funkcie main ale vytvara si ich kopie ktore meni, tie vsa po skonceni funkcie su mimo obor platnosti a to znamena ze spat vo funkcii main sa vypisu povodne hodnoty 3 a 5 a nie nove hodnoty navysene o 2.
Moja otaznka znie : je toto tvrdenie pravdive ? (chcem len vediet ci spravne chapem fungobvanie)
Kód: int main() { int a = 3; int b = 5; zmen_cisla(int &oa, int &ob); // sa navysi o 2 a aj b cout << a; // 5 cout << b; // 7 }
kod je iba ilustracny...
Toto je moja predstava o fungovani, otazka znie ci je tato predstava spravna preto chcem aby ste ma opravili ak som povedal nejaku blbinu.
_________________ Ten, kto sa pýta, je hlupákom päť minút; ten kto sa nepýta, zostáva hlupákom navždy. |
|
Registrovaný: 11.01.09 Prihlásený: 25.04.24 Príspevky: 1385 Témy: 9 Bydlisko: Hrinova | Napísal Fico: 11.08.2010 17:14 | |
|
tommy70777 píše: A teraz chcem aby sa premenne A a B po zavolani funkcie zmena_cisla navysili napr. o 2 tak musim predat parametre funkcii ako odkaz nie ? Ako odkaz alebo ako smerník - rozdiel je iba v používaní. Pri odkaze používaš pohodlne iba meno premennej, kdežto pri smerníku musíš použiť operátor referencie, teda hviezdičku *. tommy70777 píše: je toto tvrdenie pravdive ?
Presne, ako si napísal, chápeš tomu správne.
V tvojom kóde si umiestnil prototyp funkcie zmen_cisla do tela main-u, ale to si sa zrejme pomýlil. Ak chceš volať túto funkciu, tak takto:
Kód: zmen_cisla(a, b);
|
|
Registrovaný: 16.08.09 Prihlásený: 07.03.14 Príspevky: 186 Témy: 16 Bydlisko: Levice | Napísal pizet: 11.08.2010 19:06 | |
|
tommy70777 píše: Toto je moja predstava o fungovani, otazka znie ci je tato predstava spravna preto chcem aby ste ma opravili ak som povedal nejaku blbinu.
Vyskúšaj, uvidíš, prečítaj si text viackrát, uvidíš, použi google uvidíš...
_________________ "Najlepším spôsobom, ako sa na budúcnosť pripraviť, je vymyslieť si ju." - John Sculley |
|
Registrovaný: 16.02.08 Prihlásený: 08.12.10 Príspevky: 235 Témy: 13 | Napísal ado21: 13.08.2010 21:05 | |
|
pizet píše: Pri funkciách máš 3 typy parametrov. Pokiaľ viem. Pr. Kód: int fcia(int premenna) {...} // prekopíruje sa hodnota premennej typu int do premennej premenná.
int fcia(int& premenna) {...} // vytvori sa referencia na argument, ktorý je predaný odkazom. Mení to hodnotu premennej, na ktorú je to referencia.
int fcia(const int& premenna) {...} // len na čítanie...
vazne?
_________________ Učet je neaktívny. |
|
Registrovaný: 16.02.08 Prihlásený: 08.12.10 Príspevky: 235 Témy: 13 | Napísal ado21: 13.08.2010 22:32 | |
|
Fico píše: Ako odkaz alebo ako smerník - rozdiel je iba v používaní. Pri odkaze používaš pohodlne iba meno premennej, kdežto pri smerníku musíš použiť operátor referencie, teda hviezdičku *.
Je smutne, ze skuseny uzivatel tvrdi veci, ktore nie su pravda. Nechcem tu teraz rozoberat aky je rozdiel medzi pointerom a refenciou, pre zaciatocnika to asi nebude trivialne na pochopenie... Ale ved uz len z filozofie C++ je to blbost, kde nie sme v matejskej skolke a ked si mozeme nieco spravit sami, tak to nebude mat priamu podporu v jazyku...
_________________ Učet je neaktívny. |
|
Registrovaný: 08.03.09 Prihlásený: 06.10.20 Príspevky: 1116 Témy: 88 Bydlisko: 00100100 | Napísal reDo: 14.08.2010 10:04 | |
|
preco len kritizujes?! napis ked vies aby aj ostatny vedeli
_________________ Programming is The Best
Hackers Are Not Crackers!!! Hackers build things, crackers break them!
;-) |
|
Registrovaný: 11.01.09 Prihlásený: 25.04.24 Príspevky: 1385 Témy: 9 Bydlisko: Hrinova | Napísal Fico: 15.08.2010 15:22 | |
|
ado21 píše: veci, ktore nie su pravda
Nevravím pravdu? Tak ma oprav. Inak ťa prosím, odpusť si tvoje narážky.
1.) tommy70777 sa danú problematiku učí, tzn, povedal som mu úplny základ, ktorý potrebuje na začiatok. Zložitejšie a hlbšie vysvetlenia by mu boli k ničomu.
2.) ak niečo neviem, tak do témy nepíšem
3.) ak nemáš čo poradiť, nespamuj (predpokladám, že nikoho nezaujíma "myslím si" a podobne. Takže keď spomínaš, že nevravím pravdu, nech sa páči, oprav ma a zbytočnosti tu nepíš. Veď, ako si povedal, "riadiš sa rozumom", však?)
|
|
Registrovaný: 16.02.08 Prihlásený: 08.12.10 Príspevky: 235 Témy: 13 | Napísal ado21: 15.08.2010 20:52 | |
|
Fico píše: Nevravím pravdu? Tak ma oprav. Inak ťa prosím, odpusť si tvoje narážky.
1.) tommy70777 sa danú problematiku učí, tzn, povedal som mu úplny základ, ktorý potrebuje na začiatok. Zložitejšie a hlbšie vysvetlenia by mu boli k ničomu. 2.) ak niečo neviem, tak do témy nepíšem 3.) ak nemáš čo poradiť, nespamuj (predpokladám, že nikoho nezaujíma "myslím si" a podobne. Takže keď spomínaš, že nevravím pravdu, nech sa páči, oprav ma a zbytočnosti tu nepíš. Veď, ako si povedal, "riadiš sa rozumom", však?)
pointer je adresa v pamati, referencia je iba druhe meno pre ten objekt
- na refencii nemozes pouzit pointrovu aritmetiku.
- refercia nemoze odkazovat na void, pointer ano
- referncia na funkciu neexistuje, pointer na funkciu ano
- refenciu nemozes derefencovat
- refencia musi mat pri deklaracii rovno definovana
- neda sa zmenit objekt, na ktory refencia ukazuje. Stale ukaze iba na na jeden a ten isty objekt, ktory bol priradeny pri jej definicii
Nech sa na to divam akokolvek, vobec mi to nepride ako to iste a ani to nebol tvoj prvy preslap...
_________________ Učet je neaktívny. |
|
Registrovaný: 11.01.09 Prihlásený: 25.04.24 Príspevky: 1385 Témy: 9 Bydlisko: Hrinova | Napísal Fico: 15.08.2010 22:05 | |
|
Teraz si všimni môj príspevok vyššie, nič z toho som nepoprel. Napísal som, že ak treba zmeniť premennú vo vnútri funkcie, tak sa tejto funkcii môže predať ako smerník alebo ako referencia. Ďalej som napísal, že pri referencii (odkaze) na premennú sa s ňou vo funkcii pracuje ako s obyčajnou premennou na rozdiel od smerníka, ktorý nesie adresu.
Myslím, že som bol "obvinený" neprávom a keďže som si všimol v iných sekciách fóra, že si hádavý typ človeka, ajj napriek JASNE vysvetlenému opaku, tak do tejto témy ďalej odmietam prispievať, keďže problém bol aj tak už vyriešený.
|
|
Registrovaný: 16.02.08 Prihlásený: 08.12.10 Príspevky: 235 Témy: 13 | Napísal ado21: 15.08.2010 22:59 | |
|
Fico píše: Ďalej som napísal, že pri referencii (odkaze) na premennú sa s ňou vo funkcii pracuje ako s obyčajnou premennou na rozdiel od smerníka, ktorý nesie adresu. [/qoute] Neviem, naozaj nevidim, kde si take nieco napisal... Fico píše: Myslím, že som bol "obvinený" neprávom a keďže som si všimol v iných sekciách fóra, že si hádavý typ človeka, ajj napriek JASNE vysvetlenému opaku, tak do tejto témy ďalej odmietam prispievať, keďže problém bol aj tak už vyriešený.[/qoute] Studujem exaktne vedy, kde ma vyznam kazdy kvantifikator a kazde slovo. Aj zvratne zameno. V programovani duplom zalezi na kazdom znaku... Fico píše: Ako odkaz alebo ako smerník - rozdiel je iba v používaní.
Si to napisal a nie je to pravda. Nie som hadavy typ cloveka ale poznanie a pravdivost je u mna velmi vysoko... Co ak je problem ten, ze pouzivate slova iba tak, aby ste sa zamysleli, co nimi skutocne hovorite?
A naozaj si myslim, ze v takych veciach by nemal clovek veci, ktore skusenemu programatori ihned implikuju nepravdu...
A som alergicky ak nejaky clovek v role profika ide v exaktnych veciach vyhlasovat nepravdy. Aj vsetci blizko mna...
|
|
Registrovaný: 11.08.07 Príspevky: 4088 Témy: 34 Bydlisko: Brno | Napísal Ďuri: 16.08.2010 11:58 | |
|
Staci. Tema sa zamyka, o odomknutie moze pripadne poziadat autor temy.
|
|
| Stránka: 1 z 1
| [ Príspevkov: 14 ] | |
Podobné témy | Témy | Odpovede | Zobrazenia | Posledný príspevok |
---|
| Ukazovatel a operator delete c++ v Assembler, C, C++, Pascal, Java | 5 | 490 | 14.05.2016 20:50 BX | | Ukazovatel clenskej statickej funckie a jej vyvolanie C++ v Assembler, C, C++, Pascal, Java | 3 | 413 | 10.06.2017 18:16 BX | | [C++] hypertextovy odkaz v Assembler, C, C++, Pascal, Java | 1 | 375 | 18.06.2010 8:20 coldak | | Pri kliknuti na odkaz sa otvori tento odkaz v novom okne v HTML, XHTML, XML, CSS | 13 | 1993 | 08.12.2007 21:08 twistik | | Odkaz na usb na C:\Windows\System32 [ Choď na stránku: 1, 2 ] v Bezpečnosť a firewally | 58 | 1918 | 27.03.2013 19:40 personal compuper | | Nefunguje ukazovateľ jasu v Ostatné | 2 | 380 | 15.08.2012 21:21 MiSCHo_20 | | Ukazovateľ batérie (Ubuntu) v Ostatné programy | 3 | 598 | 28.11.2010 10:41 W.u.n.j.o | | MiniAPP- Ukazovateľ ping v Ostatné programy | 6 | 399 | 08.01.2016 10:14 Lessik | | ukazovatel teploty :P v Benchmarky a diagnostické programy | 17 | 2547 | 02.09.2007 21:09 Jaro | | upload skript - ukazovatel priebehu v PHP, ASP | 1 | 560 | 26.01.2009 17:44 emer | | softver - ukazovateľ skore na futbal v Grafické programy | 1 | 372 | 12.12.2014 9:16 don jebot | | Automaticky presúvať ukazovateľ myši na predvolené tlačidlo v Operačné systémy Microsoft | 0 | 399 | 06.06.2012 17:45 fagi853 | | Mám sa učiť C ++/objective C/ C#? v Assembler, C, C++, Pascal, Java | 5 | 732 | 08.07.2014 20:40 XOLOO | | odkaz v PHP, ASP | 6 | 812 | 23.05.2007 19:35 qacer | | odkaz v Ostatné | 3 | 1008 | 10.02.2007 15:43 zero0x | | Odkaz v Redakčné systémy | 4 | 827 | 15.04.2007 20:15 kajbo |
| Nemôžete zakladať nové témy v tomto fóre Nemôžete odpovedať na témy v tomto fóre Nemôžete upravovať svoje príspevky v tomto fóre Nemôžete mazať svoje príspevky v tomto fóre
|
|