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

Zbun oko array

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

[ Pregleda: 3308 | 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 - pre 229 meseci
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.
 
Odgovor na temu

Predrag Damnjanovic
Predrag Damnjanovic
Nis, Srbija

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

Sajt: www.mycity.rs


+1 Profil

icon Re: Zbun oko array08.07.2003. u 22:59 - pre 229 meseci
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...
 
Odgovor na temu

Durst
Marko Smiljanic
Bgd

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



Profil

icon Re: Zbun oko array09.07.2003. u 00:35 - pre 229 meseci
Hvala ti na otklanjanju nedoumice.
 
Odgovor na temu

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

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

Sajt: dejan.lekic.org


+2 Profil

icon Re: Zbun oko array10.07.2003. u 20:18 - pre 229 meseci
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
 
Odgovor na temu

Durst
Marko Smiljanic
Bgd

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



Profil

icon Re: Zbun oko array10.07.2003. u 23:49 - pre 229 meseci
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.
 
Odgovor na temu

Predrag Damnjanovic
Predrag Damnjanovic
Nis, Srbija

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

Sajt: www.mycity.rs


+1 Profil

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

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

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 - pre 229 meseci
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].

 
Odgovor na temu

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


+3 Profil

icon Re: Zbun oko array11.07.2003. u 11:20 - pre 229 meseci
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
 
Odgovor na temu

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


+3 Profil

icon Re: Zbun oko array11.07.2003. u 11:29 - pre 229 meseci
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
 
Odgovor na temu

Predrag Damnjanovic
Predrag Damnjanovic
Nis, Srbija

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

Sajt: www.mycity.rs


+1 Profil

icon Re: Zbun oko array11.07.2003. u 20:53 - pre 229 meseci
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
 
Odgovor na temu

Durst
Marko Smiljanic
Bgd

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



Profil

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

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

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

Postavi temu Odgovori

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