Mala šola C jezika - Kazalci - debata, poglavje 7

Vse o programiranju na in za PC

Moderatorji: Kroko, tilz0R

Mala šola C jezika - Kazalci - debata, poglavje 7

OdgovorNapisal/-a tilz0R » 30 Sep 2016, 10:12

Debata, predvsem pa vaša vprašanja, na poglavje 7 se lahko razpiše tukaj.

Poglavje je tukaj
Knowledge sharing is people' caring., T. MAJERLE
Uporabniški avatar
tilz0R
 
Prispevkov: 1815
Pridružen: 18 Jan 2015, 00:12
Kraj: Črnomelj
Zahvalil se je: 229 krat
Prejel zahvalo: 509 krat
Uporabnika povabil: s56rga
Število neizkoriščenih povabil: 255

Re: Mala šola C jezika - Kazalci - debata, poglavje 7

OdgovorNapisal/-a VolkD » 30 Sep 2016, 10:38

Sem razumel - če rečeš, da v ulici šteješ hiše potem je naslednji naslov naslednja hiša.
Če pa rečeš, da šteješ metre, potem je v tej isti ulici naslednji meter pač samo en meter naprej.

Se motim ?
Dokler bodo ljudje mislili, da živali ne čutijo bolečine, bodo živali čutile, da ljudje ne mislijowww.S5tech.net
Uporabniški avatar
VolkD
Administratorji strani
 
Prispevkov: 41597
Pridružen: 29 Dec 2014, 20:49
Kraj: Kačiče (Divača)
Zahvalil se je: 9015 krat
Prejel zahvalo: 5132 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 255

Re: Mala šola C jezika - Kazalci - debata, poglavje 7

OdgovorNapisal/-a tilz0R » 30 Sep 2016, 10:40

Ne motiš se. Tako je. Odvisno kaj gledaš. Če gledaš metre, potem je vsak ptr++ naslednji meter. Če gledaš hiše, je vsak ptr++ naslednja hiša.

To, ali gledaš metre ali hiše lahko primerjaš z char (1 meter, 1 byte) in int (1 hiša, 4-byti). Odvisno od tipa pointerja.
Knowledge sharing is people' caring., T. MAJERLE
Uporabniški avatar
tilz0R
 
Prispevkov: 1815
Pridružen: 18 Jan 2015, 00:12
Kraj: Črnomelj
Zahvalil se je: 229 krat
Prejel zahvalo: 509 krat
Uporabnika povabil: s56rga
Število neizkoriščenih povabil: 255

Re: Mala šola C jezika - Kazalci - debata, poglavje 7

OdgovorNapisal/-a VolkD » 30 Sep 2016, 11:30

tilz0R je napisal/-a:Ne motiš se. Tako je. Odvisno kaj gledaš. Če gledaš metre, potem je vsak ptr++ naslednji meter. Če gledaš hiše, je vsak ptr++ naslednja hiša.

To, ali gledaš metre ali hiše lahko primerjaš z char (1 meter, 1 byte) in int (1 hiša, 4-byti). Odvisno od tipa pointerja.
No saj tako sem napisal. Mogoče sem bil neroden.
Dokler bodo ljudje mislili, da živali ne čutijo bolečine, bodo živali čutile, da ljudje ne mislijowww.S5tech.net
Uporabniški avatar
VolkD
Administratorji strani
 
Prispevkov: 41597
Pridružen: 29 Dec 2014, 20:49
Kraj: Kačiče (Divača)
Zahvalil se je: 9015 krat
Prejel zahvalo: 5132 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 255

Re: Mala šola C jezika - Kazalci - debata, poglavje 7

OdgovorNapisal/-a SamoBr » 30 Sep 2016, 16:59

Povečevanje pointerja na grupi podatkov ( int polje[10] ) pomeni, da se pomikamo po indeksu spremenljivke polje ?

Če ja, me zanima kaj nastane, če pointer povečamo ( ptr ) več kot desetkrat. Ali pa ga recimo 30x zmanjšamo.
Se to sploh da nerediti ?

Paskal se usuje in napiše nekaj v stilu, da je index zunaj področja.
SamoBr
 
Prispevkov: 2798
Pridružen: 14 Jun 2015, 14:45
Zahvalil se je: 129 krat
Prejel zahvalo: 251 krat
Uporabnika povabil: DusanK
Število neizkoriščenih povabil: 48

Re: Mala šola C jezika - Kazalci - debata, poglavje 7

OdgovorNapisal/-a mujo » 30 Sep 2016, 19:35

SamoBr je napisal/-a:Povečevanje pointerja na grupi podatkov ( int polje[10] ) pomeni, da se pomikamo po indeksu spremenljivke polje ?

Če ja, me zanima kaj nastane, če pointer povečamo ( ptr ) več kot desetkrat. Ali pa ga recimo 30x zmanjšamo.
Se to sploh da nerediti ?

Paskal se usuje in napiše nekaj v stilu, da je index zunaj področja.


Poskusi.
Ustvari 3 polja, vsako inicaliziraj na drugo vrednost, in se s sredinskim poljem premikaj za več kot si definiral velikost polja.
Za razlago kaj se dogaja si nariši kako je zadeva postavljena v pomnilniku.
mujo
 
Prispevkov: 734
Pridružen: 21 Jan 2015, 10:50
Kraj: MB
Zahvalil se je: 1 krat
Prejel zahvalo: 150 krat
Uporabnika povabil: VolkD
Število neizkoriščenih povabil: 18

Re: Mala šola C jezika - Kazalci - debata, poglavje 7

OdgovorNapisal/-a zanka » 30 Sep 2016, 20:24

SamoBr je napisal/-a:Paskal se usuje in napiše nekaj v stilu, da je index zunaj področja.

Dobis SEGFAULT.
Uporabniški avatar
zanka
 
Prispevkov: 2569
Pridružen: 17 Mar 2016, 01:16
Zahvalil se je: 113 krat
Prejel zahvalo: 254 krat
Uporabnika povabil: DusanK
Število neizkoriščenih povabil: 50

Re: Mala šola C jezika - Kazalci - debata, poglavje 7

OdgovorNapisal/-a tilz0R » 30 Sep 2016, 22:00

SamoBr je napisal/-a:Povečevanje pointerja na grupi podatkov ( int polje[10] ) pomeni, da se pomikamo po indeksu spremenljivke polje ?

Če ja, me zanima kaj nastane, če pointer povečamo ( ptr ) več kot desetkrat. Ali pa ga recimo 30x zmanjšamo.
Se to sploh da nerediti ?

Paskal se usuje in napiše nekaj v stilu, da je index zunaj področja.


Kot je mujo omenil, najboljše je da poskušaš.
Načeloma se pa nebo zgodilo nič (prebral boš podatke na lokaciji, ki si jo določil), če le ne boš poizkušal brati z procesorjem lokacije, ki ni dovoljena.
Takrat lahko dobiš "blue screen" ali HardFault error na ARM Cortex M procesorjih.

V višje nivojskih sistemih je array bolj kot nekakšen class rezerviran v pomnilniku in ti zadaj logika skrbi, če bereš izven aka "out of bounds exception".

Ravno zato bomo tudi obdelali v naslednjem poglavju temo o pointerjih in funkcijah. Kako z pointerjem podati array kot parameter funkciji.
Takrat je potrebno podati sam pointer kot en parameter ter "count" parameter kjer poveš, koliko elementov ima tvoj array, ki ga podajaš kot pointer.
Knowledge sharing is people' caring., T. MAJERLE
Uporabniški avatar
tilz0R
 
Prispevkov: 1815
Pridružen: 18 Jan 2015, 00:12
Kraj: Črnomelj
Zahvalil se je: 229 krat
Prejel zahvalo: 509 krat
Uporabnika povabil: s56rga
Število neizkoriščenih povabil: 255

Re: Mala šola C jezika - Kazalci - debata, poglavje 7

OdgovorNapisal/-a SamoBr » 30 Sep 2016, 23:29

tilz0R je napisal/-a:Načeloma se pa nebo zgodilo nič (prebral boš podatke na lokaciji, ki si jo določil), .............
Dokler bereš. Kaj pa če pišeš ? Potem lahko popackaš po RAM-u -tudi druge spremenljivke.

Če veš kam pa kako lahko spreminjaš celo spremenljivke od kakega drugega programa (če se gre za PC).

Saj to ni nujno slabo.
SamoBr
 
Prispevkov: 2798
Pridružen: 14 Jun 2015, 14:45
Zahvalil se je: 129 krat
Prejel zahvalo: 251 krat
Uporabnika povabil: DusanK
Število neizkoriščenih povabil: 48

Re: Mala šola C jezika - Kazalci - debata, poglavje 7

OdgovorNapisal/-a tilz0R » 30 Sep 2016, 23:41

Če pišeš je isto. Če lahko pišeš boš šaral po RAM-u, drugače bo spet exception kakšen letel, ker procesor nima dostopa do tja.

Ja, če se gre za PC, potem skoraj zagotovo neboš mogel iz enega procesa pisati/brati na RAM drugega, ker je tukaj MMU enota. Ampak to ni relevantno z pointerji.
Knowledge sharing is people' caring., T. MAJERLE
Uporabniški avatar
tilz0R
 
Prispevkov: 1815
Pridružen: 18 Jan 2015, 00:12
Kraj: Črnomelj
Zahvalil se je: 229 krat
Prejel zahvalo: 509 krat
Uporabnika povabil: s56rga
Število neizkoriščenih povabil: 255

Re: Mala šola C jezika - Kazalci - debata, poglavje 7

OdgovorNapisal/-a zanka » 01 Okt 2016, 00:09

SamoBr je napisal/-a:
tilz0R je napisal/-a:Načeloma se pa nebo zgodilo nič (prebral boš podatke na lokaciji, ki si jo določil), .............
Dokler bereš. Kaj pa če pišeš ? Potem lahko popackaš po RAM-u -tudi druge spremenljivke.

Če veš kam pa kako lahko spreminjaš celo spremenljivke od kakega drugega programa (če se gre za PC).

Saj to ni nujno slabo.

Ne, slabo ni, vprašanje je, če je zaželjeno. Recimo obstajajo razni pripomočki, ki ti v igri poskrbijo, da imaš vedno dovolj življenja. :P Pa tudi ... lahko dostopajo do tvoje seje s spletne banke.
Uporabniški avatar
zanka
 
Prispevkov: 2569
Pridružen: 17 Mar 2016, 01:16
Zahvalil se je: 113 krat
Prejel zahvalo: 254 krat
Uporabnika povabil: DusanK
Število neizkoriščenih povabil: 50

Re: Mala šola C jezika - Kazalci - debata, poglavje 7

OdgovorNapisal/-a Kroko » 01 Okt 2016, 00:32

Mogoče je tu na mestu razlaga glede različnih spominskih segmentov (stack, heap, text, auto, ...) ?
http://www.planet-cnc.com poskakuješ na eni nogi in žvižgaš alpske podoknice Kroko was here!
Uporabniški avatar
Kroko
 
Prispevkov: 4773
Pridružen: 14 Jan 2015, 12:12
Kraj: Ljubljana
Zahvalil se je: 680 krat
Prejel zahvalo: 1652 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 255


Vrni se na Programski jeziki

Kdo je na strani

Po forumu brska: 0 registriranih uporabnikov in 1 gost