Obsah fóra
PravidláRegistrovaťPrihlásenie




Odpovedať na tému [ Príspevkov: 166 ] Choď na stránku: predchádzajúca 1, 2, 3, 4, 5, 6 ďalšia
AutorSpráva
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 27.06.08
Prihlásený: 04.07.11
Príspevky: 114
Témy: 12
Príspevok NapísalOffline : 01.06.2009 19:22

ako co sa tyka pointrov tak ak tie nevies a nevies ani pracu s pamatou to ako keby si ani C nevedel


Offline

Užívateľ
Užívateľ
C pomoc s funkciami

Registrovaný: 08.03.09
Prihlásený: 06.10.20
Príspevky: 1116
Témy: 88
Bydlisko: 00100100
Príspevok Napísal autor témyOffline : 01.06.2009 20:09

nwm len tu pamet lebo som tu len prebehjol okom







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

Užívateľ
Užívateľ
C pomoc s funkciami

Registrovaný: 14.02.08
Prihlásený: 04.01.15
Príspevky: 1272
Témy: 46
Bydlisko: Bratislava
Príspevok NapísalOffline : 02.06.2009 13:37

tak to si nemal, kedze pointre su srdcom a dusou jazyka C ;)







_________________
CPU:AMD Phenom II X4 960T MB: GA-MA78GM S2H VGA: ASUS EAH4850 512MB DDR3 & AC L2 PRO RAM: 4x 1GB Kingstone 800Mhz PSU: CX400W HDD: SEAGATE Barracuda 7200.10 160GB + Seagate 320GB Monitor :19"LCD ASUS VB191T OS: Win 7 Ultimate 64 bit
Offline

Užívateľ
Užívateľ
C pomoc s funkciami

Registrovaný: 08.03.09
Prihlásený: 06.10.20
Príspevky: 1116
Témy: 88
Bydlisko: 00100100
Príspevok Napísal autor témyOffline : 02.06.2009 19:36

pointeri celkom viem len ta alokacia







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

Užívateľ
Užívateľ
C pomoc s funkciami

Registrovaný: 30.05.07
Prihlásený: 29.03.14
Príspevky: 641
Témy: 46
Príspevok NapísalOffline : 02.06.2009 19:43

int i, *p;
i=123; p=&i; *p=789;
aku hodnotu bude mat i? :)


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 27.06.08
Prihlásený: 04.07.11
Príspevky: 114
Témy: 12
Príspevok NapísalOffline : 02.06.2009 20:18

ze by 789 ?? :-D

pokial sa nemylim tak pointer ukazuje na adresu i a tym padom poslednym kodom sa *p "pozrie" na i a prepise ho na 789


Offline

Užívateľ
Užívateľ
C pomoc s funkciami

Registrovaný: 30.05.07
Prihlásený: 29.03.14
Príspevky: 641
Témy: 46
Príspevok NapísalOffline : 02.06.2009 21:40

ale to mal hadat redo ked hovori ze vie pointre :D ale inak dobre


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 27.06.08
Prihlásený: 04.07.11
Príspevky: 114
Témy: 12
Príspevok NapísalOffline : 03.06.2009 12:59

nj tak daj iny trosku zlozitejsi :P som len myslel ze to tak si dal do plena :-D


Offline

Užívateľ
Užívateľ
C pomoc s funkciami

Registrovaný: 30.05.07
Prihlásený: 29.03.14
Príspevky: 641
Témy: 46
Príspevok NapísalOffline : 03.06.2009 13:41

Kód:
printf("neprospel"+2*(toupper(kod)=='P'));

co robi tento prikaz?
hadajte kto chcete :)
inak ja toto prilis neovladam, tento priklad mam od naseho prednasajuceho, nevedel by som co to robi keby to tam nemal napisane...


Offline

Užívateľ
Užívateľ
C pomoc s funkciami

Registrovaný: 08.03.09
Prihlásený: 06.10.20
Príspevky: 1116
Témy: 88
Bydlisko: 00100100
Príspevok Napísal autor témyOffline : 03.06.2009 14:28

nwm povedz







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

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 21.05.08
Prihlásený: 04.10.09
Príspevky: 21
Témy: 0
Príspevok NapísalOffline : 03.06.2009 14:31

Pekný príklad.Tuto máte malú ukážku ako si s tým poradí asm a čo sa vlastne deje.

Inak toto je praktický to isté a možno pre niekoho zrozumitelnejšie:
Kód:
char kod[9];
strcpy(kod,"neprospel");
printf(&kod[2*(toupper(znak)=='P')]);
tzn. že je úplne jedno či tam bude konštantný tvar, alebo pole, pointer, atd.. Vždy to budú data a vždy bude ukazovať na začiatok tychto dat a je už každého vec ako s tým naloží, či už vo funkcii alebo niekde inde bude meniť ukazatel.


Offline

Užívateľ
Užívateľ
C pomoc s funkciami

Registrovaný: 08.03.09
Prihlásený: 06.10.20
Príspevky: 1116
Témy: 88
Bydlisko: 00100100
Príspevok Napísal autor témyOffline : 03.06.2009 15:46

no to so si myslel tiez ale asi to tak neni







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

Užívateľ
Užívateľ
C pomoc s funkciami

Registrovaný: 30.05.07
Prihlásený: 29.03.14
Príspevky: 641
Témy: 46
Príspevok NapísalOffline : 03.06.2009 17:07

to J3rGuS: neviem co mal robit tvoj kus kodu ale nerobi to co moj
moj ma robit to, ze ak je kod == 'p' alebo 'P' tak napise prospel a ak je nieco ine, napise neprospel

funguje to tak, ze ked je splnena podmienka, tak to ma hodnotu 1, vynasobi sa dvojkou, mame dvojku a potom ta finta s pointrami, ale to ja neviem ako presne funguje - proste sa zaciatok retazca posunie o 2, a pri kod != P sa dvojka nasobi nulou a tym padom sa zaciatok neposunie...


Offline

Užívateľ
Užívateľ
C pomoc s funkciami

Registrovaný: 08.03.09
Prihlásený: 06.10.20
Príspevky: 1116
Témy: 88
Bydlisko: 00100100
Príspevok Napísal autor témyOffline : 03.06.2009 17:14

ty brdo preco tu davas neco comu sam nechpes ? :jaw: :loony:







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

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 21.05.08
Prihlásený: 04.10.09
Príspevky: 21
Témy: 0
Príspevok NapísalOffline : 03.06.2009 17:51

Citácia:
to J3rGuS: neviem co mal robit tvoj kus kodu ale nerobi to co moj
moj ma robit to, ze ak je kod == 'p' alebo 'P' tak napise prospel a ak je nieco ine, napise neprospel

No môj kód robí prakticky to isté čo tvoj (ak neveríš vyskúšaj si to), akurát ja som použil iný príklad, tj. s lokálnou premennou, kdežto ty máš použitú konštantu. Výhoda je podľa mna v tom že pri tvojom sa nemusí zapisovať žiaden string na stack, ale jednoducho sa posunie pointer v datovom segmente podla podmienky (viď obrázok).


Offline

Užívateľ
Užívateľ
C pomoc s funkciami

Registrovaný: 08.03.09
Prihlásený: 06.10.20
Príspevky: 1116
Témy: 88
Bydlisko: 00100100
Príspevok Napísal autor témyOffline : 03.06.2009 17:53

o com tocis? :oops:







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

Užívateľ
Užívateľ
C pomoc s funkciami

Registrovaný: 30.05.07
Prihlásený: 29.03.14
Príspevky: 641
Témy: 46
Príspevok NapísalOffline : 03.06.2009 19:10

J3rGuS: no ja som praveze tvoj kod skusil a vzdy vypisal neprospel, ale je pravda ze do toho prilis nevidim takze som to mozno skusal zle
reDo: pisem to sem preto lebo si machroval ze vies pointre, co sa mi zdalo dost nerealne, ja ich neviem skoro vobec ale ani ich momentalne vediet nepotrebujem.


Offline

Užívateľ
Užívateľ
C pomoc s funkciami

Registrovaný: 14.02.08
Prihlásený: 04.01.15
Príspevky: 1272
Témy: 46
Bydlisko: Bratislava
Príspevok NapísalOffline : 03.06.2009 19:28

reDo píše:
pointeri celkom viem len ta alokacia


co presne nevies na alokacii? :rolleyes:







_________________
CPU:AMD Phenom II X4 960T MB: GA-MA78GM S2H VGA: ASUS EAH4850 512MB DDR3 & AC L2 PRO RAM: 4x 1GB Kingstone 800Mhz PSU: CX400W HDD: SEAGATE Barracuda 7200.10 160GB + Seagate 320GB Monitor :19"LCD ASUS VB191T OS: Win 7 Ultimate 64 bit
Offline

Užívateľ
Užívateľ
C pomoc s funkciami

Registrovaný: 08.03.09
Prihlásený: 06.10.20
Príspevky: 1116
Témy: 88
Bydlisko: 00100100
Príspevok Napísal autor témyOffline : 03.06.2009 19:59

no kedze so len tak obehol ockom takze viem len tak nazvy funkcii na alokaciu a idme si to dobrat a tie pointeri som myslel teoriu nie prex a hentake tazke to nevdel nikdo ani ty tak sa nesmej :)







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

Užívateľ
Užívateľ
C pomoc s funkciami

Registrovaný: 30.05.07
Prihlásený: 29.03.14
Príspevky: 641
Témy: 46
Príspevok NapísalOffline : 03.06.2009 20:23

ten druhy priklad bol dost tazky ale ak nevies ten prvy tak nevies pointre - nesmejem sa ti, ani ja ich dobre neviem, viem akurat zakladnu syntax a mierne to pouzit, dynamicky alokovat som uz tiez zabudol, akurat v pascale by som vedel spravit kvalitne dynamicke struktury :D


Offline

Užívateľ
Užívateľ
C pomoc s funkciami

Registrovaný: 08.03.09
Prihlásený: 06.10.20
Príspevky: 1116
Témy: 88
Bydlisko: 00100100
Príspevok Napísal autor témyOffline : 03.06.2009 20:36

ten prvy viem ale ten druhy som nevedel







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

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 30.04.08
Prihlásený: 15.05.15
Príspevky: 884
Témy: 3
Príspevok NapísalOffline : 03.06.2009 21:01

Skusim to trochu upresnit.
Aku hodnotu ma vyraz "neprospel"? Predstavuje adresu v pamati, na ktorej je ulozeny znak 'n' (potom 'e', 'p' ... atd.). Preto ak mame definiciu
Kód:
char * p = "neprospel";

do pointra p sa zapise adresa retazca "neprospel". Potom uz ide len o to, co pisal tlacitko Enter
Kód:
printf("neprospel"+2*(toupper(kod)=='P'));

ak sa vyhodnoti vyraz toupper(kod) == 'P' ako pravdivy, teda plati kod == 'p' alebo kod == 'P', vynasobi sa 2*1, teda k "neprospel" sa pricita hodnota 2, cize k adrese retazca "neprospel". Predpokladajme, ze "neprospel" ma hodnotu 10, teda retazec je ulozeny na adrese od 10 po nejakych 20. A vyraz "neprospel" + 2 ma teda hodnotu 12, cize fcii printf je predana adresa 12, na ktoru sa printf pozrie a vypisuje retazec od 12 az po 20(teda po znak '\0').
Ak ta podmienka neplati, tak 2*0 je 0 a printf obdrzi adresu "neprospel", teda ho vypise cely... :)

Edit1:
btw. Jergus, tvoj kod nemusi vzdy fungovat (aj ked vo vacsine pripadov dava spravne vysledky) ale alokoval si len 9 bajtov, pricom si mal 10 - zabudol si na '\0', ktory sa uz zapisal do cudzej pamate. :)

Edit2:
Hm ok, prave som si vsimol, ze co som vyssie pisal je aj v tom Jergusovom screene... :D







_________________
Empty your memory, with a free()… like a pointer!
If you cast a pointer to an integer,
it becomes the integer, if you cast a pointer to a struct, it becomes the struct…
The pointer can crash…, and can overflow…
Be a pointer my friend…
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 21.05.08
Prihlásený: 04.10.09
Príspevky: 21
Témy: 0
Príspevok NapísalOffline : 03.06.2009 21:20

Inak pozor to čo písal neutronmind je len prirovnanie, tzn. že je rozdiel ak do printf dáš konštantu alebo pointer. Ale ideológia je v podstate správna (i keď sa k adrese v skutočonsti nič nepričítava).
Citácia:
Edit1:
btw. Jergus, tvoj kod nemusi vzdy fungovat (aj ked vo vacsine pripadov dava spravne vysledky) ale alokoval si len 9 bajtov, pricom si mal 10 - zabudol si na '\0', ktory sa uz zapisal do cudzej pamate.

Áno to je možne... No mne išlo len o samotnú funkciu.


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 30.04.08
Prihlásený: 15.05.15
Príspevky: 884
Témy: 3
Príspevok NapísalOffline : 03.06.2009 21:36

J3rGuS píše:
Inak pozor to čo písal neutronmind je len prirovnanie, tzn. že je rozdiel ak do printf dáš konštantu alebo pointer. Ale ideológia je v podstate správna (i keď sa k adrese v skutočonsti nič nepričítava).

Hm, preco? :rolleyes:







_________________
Empty your memory, with a free()… like a pointer!
If you cast a pointer to an integer,
it becomes the integer, if you cast a pointer to a struct, it becomes the struct…
The pointer can crash…, and can overflow…
Be a pointer my friend…
Offline

Užívateľ
Užívateľ
C pomoc s funkciami

Registrovaný: 08.03.09
Prihlásený: 06.10.20
Príspevky: 1116
Témy: 88
Bydlisko: 00100100
Príspevok Napísal autor témyOffline : 03.06.2009 22:13

neutromind asi jedniny chape o com ten kod bol :)







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

Užívateľ
Užívateľ
C pomoc s funkciami

Registrovaný: 16.02.08
Prihlásený: 08.12.10
Príspevky: 235
Témy: 13
Príspevok NapísalOffline : 04.06.2009 16:55

reDo píše:
ty brdo preco tu davas neco comu sam nechpes ? :jaw: :loony:


lebo je to forum?


Offline

Užívateľ
Užívateľ
C pomoc s funkciami

Registrovaný: 16.02.08
Prihlásený: 08.12.10
Príspevky: 235
Témy: 13
Príspevok NapísalOffline : 04.06.2009 17:18

Kód:
printf("neprospel"+2*(toupper(kod)=='P'));


Trochu pre objasnenie, treba si uvedomit klucove veci. Tato finta nemusi vzdy sa vsade fungovat, ale na beznych PC, ktore poznate, to funguje.

Dovod? Pamat na beznych PC ma bloky rozdele po 1 byte = 8 bitov. Jeden znak sa zmesti do 8 bitov. Teda ak pointer posunie o 2, tak sa posunie o 2 bloky v pamati, co su 2 byty. Funguje to iba preto, ze znak ma 1 byt.

Viem vela opakovania, ale mam skusenosti, ze sa to hodi.

Napr.
Kód:
int i;
i alokuje 4 byty = 32 bitov. Teda a zabera 4 bloky v pameti.

Mame napriklad
Kód:
int pole[4]
. Funguje to tak, ze pole je pointer na zaciatok pola, teda na nulty prvok. Ale vieme, ze int zabera 4 bajty, teda ak chceme treti prvok pola, tak ten dostaneme tak
Kód:
*(pole+2*4)
co je presne to iste ako
Kód:
pole[2]
.

No ani int nemusi mat vzdy 4 byte, tak sa pre istotu kompabilitu pouziva
Kód:
*(pole+2*sizeof(int)).


Klucom je uvedomit si to, ze bezna pamat sa alokuje po bytoch. Teda aj ked date v C++ bool b; tak b naalokuje 1 byte, lebo menej nemoze, aj ked moze nabyvat iba 2 hodnoty... Preto C nema typ bool, lebo autori C povazovali za plyvanie alokovat 1 byte = 8 bitov = 256 roznych hodnot pre bool, ktory ma iba 2 hodnoty. Co asi nie je najstatnejsie riesenie, lebo kedy sme chceil
Kód:
bool pole2[100];
tak v C++ sa vyuziju takmer vsetky hodnoty, kdez to ak chceme efektivne vyuzit pamat v C, tak si musime naprogramovat vlastne bitove pole.


Offline

Užívateľ
Užívateľ
C pomoc s funkciami

Registrovaný: 08.03.09
Prihlásený: 06.10.20
Príspevky: 1116
Témy: 88
Bydlisko: 00100100
Príspevok Napísal autor témyOffline : 04.06.2009 17:28

ozaj uz som sa naucil pracovbat s tou alokaciu v C :) stacilo to kuknut a uvedomit si to :)







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

Užívateľ
Užívateľ
C pomoc s funkciami

Registrovaný: 16.02.08
Prihlásený: 08.12.10
Príspevky: 235
Témy: 13
Príspevok NapísalOffline : 04.06.2009 17:36

alokacia == pridelenie pamati
pridelenie == rezervovanie
rezervovanie == obsadenie
obsadenie == uz tam nikto iny nema co robit







_________________
Učet je neaktívny.
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 30.04.08
Prihlásený: 15.05.15
Príspevky: 884
Témy: 3
Príspevok NapísalOffline : 04.06.2009 18:17

ado21 píše:
Mame napriklad
Kód:
int pole[4]
. Funguje to tak, ze pole je pointer na zaciatok pola, teda na nulty prvok. Ale vieme, ze int zabera 4 bajty, teda ak chceme treti prvok pola, tak ten dostaneme tak
Kód:
*(pole+2*4)
co je presne to iste ako
Kód:
pole[2]
.

No ani int nemusi mat vzdy 4 byte, tak sa pre istotu kompabilitu pouziva
Kód:
*(pole+2*sizeof(int)).

Dovolim si nesuhlasit.
Kód:
*(pole+2*4)
nie je to iste co
Kód:
pole[2]
.
ale pole[2]== *(pole + 2), tzn. uz tam nemusis davat 2*sizeof(typ), kompilator to tam doplni implicitne na zaklade typu pointera.
ado21 píše:
Teda ak pointer posunie o 2, tak sa posunie o 2 bloky v pamati, co su 2 byty. Funguje to iba preto, ze znak ma 1 byt.

Preto neplati ani toto tvrdenie. Ak mas int pole[10], tak vyraz *(pole + 2) sa automaticky prevedie na *(pole + 2*sizeof(int)). O tom je pointerova aritmetika. Ak by si tam dal vsak to *sizeof(int) explicitne, tak to uz kompilator necha tak, cize nevznikne nieco ako *(pole + 2*sizeof(int)*sizeof(int))... :rolleyes:







_________________
Empty your memory, with a free()… like a pointer!
If you cast a pointer to an integer,
it becomes the integer, if you cast a pointer to a struct, it becomes the struct…
The pointer can crash…, and can overflow…
Be a pointer my friend…
Odpovedať na tému [ Príspevkov: 166 ] Choď na stránku: predchádzajúca 1, 2, 3, 4, 5, 6 ďalšia


Podobné témy

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

v PHP, ASP

6

529

27.08.2012 4:26

Ďuri Zobrazenie posledných príspevkov

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

v JavaScript, VBScript, Ajax

0

253

02.04.2013 17:34

maťo* Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Ako nastaviť všetkým EditBoxom jedno PopUp menu s funkciami?

v Delphi, Visual Basic

9

742

01.08.2010 22:22

Manny Zobrazenie posledných príspevkov

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

v Ovládače

7

1129

09.09.2017 20:37

Smith Wesson Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Pomoc pri pomoc pri skladaní PC - od 1 500 do 1 800 Eur (rozlíšenie 1440p)

v PC zostavy

13

795

28.09.2023 20:23

johny314 Zobrazenie posledných príspevkov

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

v Procesory

6

988

02.02.2008 18:27

Jaro Zobrazenie posledných príspevkov

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

v Ostatné

13

951

08.08.2009 22:16

malcolm Zobrazenie posledných príspevkov

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

v Ovládače

1

953

18.08.2007 16:07

johny128 Zobrazenie posledných príspevkov

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

v HTML, XHTML, XML, CSS

1

548

09.08.2017 20:01

BX Zobrazenie posledných príspevkov

Táto téma je zamknutá, nemôžete posielať nové príspevky alebo odpovedať na staršie. pomoc

v Počítačové hry

5

491

28.06.2011 16:32

Ďuri Zobrazenie posledných príspevkov

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

v ATI/AMD grafické karty

3

699

04.03.2008 15:00

Mir Zobrazenie posledných príspevkov

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

v Operačné systémy Microsoft

3

627

29.12.2007 18:42

Dzimbo Zobrazenie posledných príspevkov

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

v Zvuk

2

837

24.11.2007 17:30

optyx Zobrazenie posledných príspevkov

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

v PHP, ASP

2

786

02.02.2008 17:17

Punker661 Zobrazenie posledných príspevkov

Táto téma je zamknutá, nemôžete posielať nové príspevky alebo odpovedať na staršie. pomoc

v HTML, XHTML, XML, CSS

1

374

18.10.2013 18:36

Ďuri Zobrazenie posledných príspevkov

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

v PHP, ASP

6

709

01.08.2008 16:27

Darkeye18 Zobrazenie posledných príspevkov


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

Skočiť na:  

Powered by phpBB Jarvis © 2005 - 2024 PCforum, webhosting by WebSupport, secured by GeoTrust, edited by JanoF
Ako väčšina webových stránok aj my používame cookies. Zotrvaním na webovej stránke súhlasíte, že ich môžeme používať.
Všeobecné podmienky, spracovanie osobných údajov a pravidlá fóra