Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Zbun oko array

[es] :: C/C++ programiranje :: Zbun oko array

[ Pregleda: 1824 | Odgovora: 10 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Durst
Marko Smiljanic
Bgd

Član broj: 6751
Poruke: 32
*.ptt.yu



Profil

icon Zbun oko array08.07.2003. u 22:32

Imam jedno cisto teorijsko pitanje, koje glasi: Da li se indexom za kretanje kroz niz samo povecava identifikator niza koji je pointer ili je to reseno na neki drugi nacin. Tj. da li su a[10] i a + 10 identicne operacije na nivou kompajlera ili za svaku od njih postoje posebne instrukcije.
Imam utisak da je odgovor na ovo pitanje pozitivan, ali nisam siguran.
08.07.2003. u 22:32 

Predrag Damnjanovic
Predrag Damnjanovic
Nis, Srbija

Član broj: 141
Poruke: 1305
*.dial.InfoSky.Net

Sajt: www.mycity.rs


Profil

icon Re: Zbun oko array08.07.2003. u 22:59
yap
a[10] = *(a+10)

imaj na umu da se pointer pomera za
10 * sizeof(T)
gde je T tip niza
dakle, pointer se ne pomera za 10 bajta (osim ako je sizeof(T)=1), vec za 10 * sizeof(T)

nizovi su obicni pokazivaci...
08.07.2003. u 22:59 

Durst
Marko Smiljanic
Bgd

Član broj: 6751
Poruke: 32
*.ptt.yu



Profil

icon Re: Zbun oko array09.07.2003. u 00:35
Laptopovi

Hvala ti na otklanjanju nedoumice.
09.07.2003. u 00:35 

leka
Dejan Lekić
senior software engineer, 3Developers
Ltd.
London, UK

Član broj: 234
Poruke: 2530
*.telia.com

Sajt: dejan.lekic.org


Profil

icon Re: Zbun oko array10.07.2003. u 20:18
Da, ali zar nisi mogo da napišeš prosto programče koje štampa adrese od a[10] i *(a+10) ??? :) Tako bi video da li grešiš ili ne. Blago meni ja sam tako učio svaki jezik, tako i ti (a i ostali budući programeri) trea da razmišljate - počnite da razmišljate na programerski način!
Dejan Lekic
software engineer, MySQL/PgSQL DBA, sysadmin
10.07.2003. u 20:18 

Durst
Marko Smiljanic
Bgd

Član broj: 6751
Poruke: 32
*.ptt.yu



Profil

icon Re: Zbun oko array10.07.2003. u 23:49
Ma to sam odradio, ali me je zanimalo da li postoje posebne operacije pri prevodjenju toga u masinski jezik. To je jedina nedoumica koju sam imao, a ne da li ce rezultat biti isti.

P.S.
Da su operacije razlicite onda bih se pitao koji od ta dva nacina je brzi, efikasniji itd.
10.07.2003. u 23:49 

Predrag Damnjanovic
Predrag Damnjanovic
Nis, Srbija

Član broj: 141
Poruke: 1305
*.dial.InfoSky.Net

Sajt: www.mycity.rs


Profil

icon Re: Zbun oko array11.07.2003. u 00:10
kompajleri a[10] pretvaraju u *(a+10)

ili ako bas hoces nisko :
*(adresa_niza * velicina(tipa) * 10)
:)
11.07.2003. u 00:10 

alkal
Aleksandar Kalanj
Beograd

Član broj: 7960
Poruke: 26
*.etf.bg.ac.yu

Jabber: alkal@elitesecurity.org
Sajt: wapdata.co.cc


Profil

icon Re: Zbun oko array11.07.2003. u 10:43
Evo i zanimljivosti:
a[10] <=> *(a+10) <=> *(10+a) <=> 10[a]
Znači elementima niza možeš da se obraćaš u obliku indeks[niz].

11.07.2003. u 10:43 

filmil
Filip Miletić
Oce Technologies B.V., inženjer
hardvera
Arcen, NL

Član broj: 243
Poruke: 2114
*.et.tudelft.nl

Jabber: filmil@jabber.org
ICQ: 36601391


Profil

icon Re: Zbun oko array11.07.2003. u 11:20
Citat:

nizovi su obicni pokazivaci


Ne sasvim. Nizovi su labele koje pokazuju na prvi element niza.

To znači da su, kao i svaka druga labela, vezani za neko mesto u memoriji i da se na njih može primeniti pointerska aritmetika ali im se ne može dodeljivati vrednost (pošto labela ne može da menja mesto u memoriji!)

Dakle ako želite da uradite nešto poput

Code:

int a[10];
a += 5;


moraćete umesto gornjeg koda da odvojite jedan pointer za šetnju po nizu:

Code:

int a[10];
int *p
p = a + 5;


f
11.07.2003. u 11:20 

filmil
Filip Miletić
Oce Technologies B.V., inženjer
hardvera
Arcen, NL

Član broj: 243
Poruke: 2114
*.et.tudelft.nl

Jabber: filmil@jabber.org
ICQ: 36601391


Profil

icon Re: Zbun oko array11.07.2003. u 11:29
Citat:
Predrag Damnjanovic:
kompajleri a[10] pretvaraju u *(a+10)

ili ako bas hoces nisko :
*(adresa_niza * velicina(tipa) * 10)
:)


Ako si mislio na:
*(adresa_niza + velicina(tipa) * 10)

onda je tvoja logika neispravna, pošto je izraz u zagradi tipa int*, što će reći da se pointeri šetaju po intovima a ne po charovima. Drugim rečima, ovaj gornji izraz će se postaviti ne na deseti, nego na dvadeseti element niza (ako je tip 16-bitni), odnosno četrdeseti (ako je tip 32-bitni)! Podsećam te na tri pravila programiranja u C-u: careful, careful, careful.

f
11.07.2003. u 11:29 

Predrag Damnjanovic
Predrag Damnjanovic
Nis, Srbija

Član broj: 141
Poruke: 1305
*.dial.InfoSky.Net

Sajt: www.mycity.rs


Profil

icon Re: Zbun oko array11.07.2003. u 20:53
ovo poslednje nema veze sa C-om, to je vise formula, da covek zna gde pokazuje pointer

zato sam namerno napisao 'adresa', a ne pointer
11.07.2003. u 20:53 

Durst
Marko Smiljanic
Bgd

Član broj: 6751
Poruke: 32
*.ptt.yu



Profil

icon Re: Zbun oko array12.07.2003. u 02:54
Hvala ljudi. Jeste malo overkill ali je i vrlo korisno i vredno daljeg varenja. Valjda cu uspeti da sve to razjasnim u glavi.
12.07.2003. u 02:54 

[es] :: C/C++ programiranje :: Zbun oko array

[ Pregleda: 1824 | Odgovora: 10 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.