[ Príspevkov: 14 ] 
AutorSpráva
Offline

Užívateľ
Užívateľ
C++ ukazovatel a odkaz

Registrovaný: 07.04.07
Prihlásený: 10.08.10
Príspevky: 171
Témy: 42 | 42
Bydlisko: Bratislava
NapísalOffline : 10.08.2010 12:28 | C++ ukazovatel a odkaz

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.
Offline

Užívateľ
Užívateľ
C++ ukazovatel a odkaz

Registrovaný: 16.08.09
Prihlásený: 07.03.14
Príspevky: 186
Témy: 16 | 16
Bydlisko: Levice
NapísalOffline : 10.08.2010 12:39 | C++ ukazovatel a odkaz

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
Offline

Užívateľ
Užívateľ
C++ ukazovatel a odkaz

Registrovaný: 16.08.09
Prihlásený: 07.03.14
Príspevky: 186
Témy: 16 | 16
Bydlisko: Levice
NapísalOffline : 10.08.2010 16:30 | C++ ukazovatel a odkaz

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
Offline

Užívateľ
Užívateľ
C++ ukazovatel a odkaz

Registrovaný: 07.04.07
Prihlásený: 10.08.10
Príspevky: 171
Témy: 42 | 42
Bydlisko: Bratislava
Napísal autor témyOffline : 11.08.2010 16:59 | C++ ukazovatel a odkaz

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.
Offline

Skúsený užívateľ
Skúsený užívateľ
C++ ukazovatel a odkaz

Registrovaný: 11.01.09
Prihlásený: 01.05.26
Príspevky: 1399
Témy: 10 | 10
Bydlisko: Hrinova
NapísalOffline : 11.08.2010 17:14 | C++ ukazovatel a odkaz

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);


Offline

Užívateľ
Užívateľ
C++ ukazovatel a odkaz

Registrovaný: 16.08.09
Prihlásený: 07.03.14
Príspevky: 186
Témy: 16 | 16
Bydlisko: Levice
NapísalOffline : 11.08.2010 19:06 | C++ ukazovatel a odkaz

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
Offline

Užívateľ
Užívateľ
C++ ukazovatel a odkaz

Registrovaný: 16.02.08
Prihlásený: 08.12.10
Príspevky: 235
Témy: 13 | 13
NapísalOffline : 13.08.2010 21:05 | C++ ukazovatel a odkaz

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.
Offline

Užívateľ
Užívateľ
C++ ukazovatel a odkaz

Registrovaný: 16.02.08
Prihlásený: 08.12.10
Príspevky: 235
Témy: 13 | 13
NapísalOffline : 13.08.2010 22:32 | C++ ukazovatel a odkaz

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.
Offline

Užívateľ
Užívateľ
C++ ukazovatel a odkaz

Registrovaný: 08.03.09
Prihlásený: 17.01.25
Príspevky: 1116
Témy: 88 | 88
Bydlisko: 00100100
NapísalOffline : 14.08.2010 10:04 | C++ ukazovatel a odkaz

preco len kritizujes?! napis ked vies aby aj ostatny vedeli


_________________
Programming is The Best
Hackers Are Not Crackers!!! Hackers build things, crackers break them!
;-)
Offline

Skúsený užívateľ
Skúsený užívateľ
C++ ukazovatel a odkaz

Registrovaný: 11.01.09
Prihlásený: 01.05.26
Príspevky: 1399
Témy: 10 | 10
Bydlisko: Hrinova
NapísalOffline : 15.08.2010 15:22 | C++ ukazovatel a odkaz

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?)


Offline

Užívateľ
Užívateľ
C++ ukazovatel a odkaz

Registrovaný: 16.02.08
Prihlásený: 08.12.10
Príspevky: 235
Témy: 13 | 13
NapísalOffline : 15.08.2010 20:52 | C++ ukazovatel a odkaz

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.
Offline

Skúsený užívateľ
Skúsený užívateľ
C++ ukazovatel a odkaz

Registrovaný: 11.01.09
Prihlásený: 01.05.26
Príspevky: 1399
Témy: 10 | 10
Bydlisko: Hrinova
NapísalOffline : 15.08.2010 22:05 | C++ ukazovatel a odkaz

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ý.


Offline

Užívateľ
Užívateľ
C++ ukazovatel a odkaz

Registrovaný: 16.02.08
Prihlásený: 08.12.10
Príspevky: 235
Témy: 13 | 13
NapísalOffline : 15.08.2010 22:59 | C++ ukazovatel a odkaz

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...


Offline

Čestný člen
Čestný člen
C++ ukazovatel a odkaz

Registrovaný: 11.08.07
Príspevky: 4088
Témy: 34 | 34
Bydlisko: Brno
NapísalOffline : 16.08.2010 11:58 | C++ ukazovatel a odkaz

Staci. Tema sa zamyka, o odomknutie moze pripadne poziadat autor temy.


 [ Príspevkov: 14 ] 


C++ ukazovatel a odkaz



Podobné témy

 Témy  Odpovede  Zobrazenia  Posledný príspevok 
V tomto fóre nie sú ďalšie neprečítané témy.

Ukazovatel a operator delete c++

v Backend

5

582

14.05.2016 20:50

BX

V tomto fóre nie sú ďalšie neprečítané témy.

Ukazovatel clenskej statickej funckie a jej vyvolanie C++

v Backend

3

520

10.06.2017 18:16

BX

V tomto fóre nie sú ďalšie neprečítané témy.

[C++] hypertextovy odkaz

v Backend

1

448

18.06.2010 8:20

coldak

V tomto fóre nie sú ďalšie neprečítané témy.

Pri kliknuti na odkaz sa otvori tento odkaz v novom okne

v Frontend

13

2109

08.12.2007 21:08

twistik

V tomto fóre nie sú ďalšie neprečítané témy.

Odkaz na usb na C:\Windows\System32

[ Choď na stránku:Choď na stránku: 1, 2 ]

v Firewally a bezpečnosť

58

2076

27.03.2013 19:40

personal compuper

V tomto fóre nie sú ďalšie neprečítané témy.

Nefunguje ukazovateľ jasu

v Ostatné

2

482

15.08.2012 21:21

MiSCHo_20

V tomto fóre nie sú ďalšie neprečítané témy.

MiniAPP- Ukazovateľ ping

v Ostatné programy

6

498

08.01.2016 10:14

Lessik

V tomto fóre nie sú ďalšie neprečítané témy.

ukazovatel teploty :P

v Benchmarky a diagnostické programy

17

2633

02.09.2007 21:09

Jaro

V tomto fóre nie sú ďalšie neprečítané témy.

Ukazovateľ batérie (Ubuntu)

v Ostatné programy

3

703

28.11.2010 10:41

W.u.n.j.o

V tomto fóre nie sú ďalšie neprečítané témy.

upload skript - ukazovatel priebehu

v Backend

1

629

26.01.2009 17:44

emer

V tomto fóre nie sú ďalšie neprečítané témy.

softver - ukazovateľ skore na futbal

v Grafické programy

1

473

12.12.2014 9:16

don jebot

V tomto fóre nie sú ďalšie neprečítané témy.

Automaticky presúvať ukazovateľ myši na predvolené tlačidlo

v Windows

0

515

06.06.2012 17:45

fagi853

V tomto fóre nie sú ďalšie neprečítané témy.

Mám sa učiť C ++/objective C/ C#?

v Backend

5

849

08.07.2014 20:40

XOLOO

V tomto fóre nie sú ďalšie neprečítané témy.

odkaz

v Frontend

8

831

01.11.2010 10:22

dessert

V tomto fóre nie sú ďalšie neprečítané témy.

odkaz

v Ostatné

3

1088

10.02.2007 15:43

zero0x

V tomto fóre nie sú ďalšie neprečítané témy.

Odkaz

v CMS

4

901

15.04.2007 20:15

kajbo



© 2005 - 2026 PCforum, edited by JanoF