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

pokazivaci

[es] :: C/C++ programiranje :: pokazivaci

[ Pregleda: 3037 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Pretender

Član broj: 12407
Poruke: 100
212.124.182.*



Profil

icon pokazivaci27.08.2003. u 19:23 - pre 251 meseci
Pozdrav svima.

Imam par novih pitanja.

1) Da vidimo da li sam dobro shvatio kako pokazivaci rade. (izvinjavam se na prirucnoj sintaksi):

lets:

int VarX = 10;
(& VarX == F)

int VarY = 4095;
(& VarY == FF)

int VarZ = 555;
(& VarZ == FFF)

int *pOne = & VarX;
*pOne == 10
pOne == 15

int *pTwo = VarY;
*pTwo == 555
pTwo == 4095

Da li su `boldovi` korektni? (i da li se vrsi automatska konverzija hexadec. u dec. broj, kada neka promenljiva treba da dobije vrednost neke adrese)


2) Koja je sustinska razlika izmedju predavanja vrednosti by value i by reference. Naime, sta bi trebalo da navede na koriscenje, npr. iskaza
*pVar = 10 umesto Var = 10 ?
Ako je Var private, onda ni jedan od ovih iskaza (izvan objekta) ne bi smeo da je promeni
Ovo prakticno uopste (za sad) nije objasnjeno, mada postoje neka obecanja autora).


3) Zasto se neke promenljive kreiraju na slobodnom skladistu umesto (standardno) na steku ?

Autor o ovome kaze :
" Prednost pristupanja memoriji na ovaj nacin, umesto koriscenja globalnih promenljivih, je to da samo funkcije sa pristupom pokazivacu imaju pristup podacima. Ovo obezbedjuje usko kontrolisan interfejs ka tim podacima i eliminise opasnost da neka funkcija promeni podatke na neocekivane i nepripremljene nacine."

a) Pokazivaci mogu da pokazuju i na podatke na steku, pa ne vidim kako ovo pominjanje pokazivaca doprinosi razumevanju znacaja slobodnog skladista.

b) Pristup podacima, koliko sam do sada video, mozemo kontrolisati deklarisanjem metoda i promenljivih u objektu, kao private i public.
Znaci, ako treba da pristupimo nekom private podatku, pozvacemo, iz nase f-je pristupni metod datog objekta i to ce raditi i bez pokazivaca.


Pretpostavljam da bi ova pitanja mogla zahtevati i suvise opsezne odgovore, i da cete mi reci da je te stvari morao da objasni autor (o knjizi je vec bilo reci), ali sad sta da radim. Cini mi se, da sa odmicanjem u dubinu, kvalitet knjige opada (u pocetku sam bio vrlo zadovoljan).

Hvala
 
Odgovor na temu

brcha
Filip Brčić
Beograd, Serbia

Član broj: 440
Poruke: 436

Jabber: brcha@kdetalk.net
ICQ: 40994923
Sajt: brcha.com


+2 Profil

icon Re: pokazivaci28.08.2003. u 04:01 - pre 251 meseci
Citat:
1) ... Da li su `boldovi` korektni? (i da li se vrsi automatska konverzija hexadec. u dec. broj, kada neka promenljiva treba da dobije vrednost neke adrese)


Jesu korektni, samo ne razumem na šta misliš pod konverzijom hex u dec? Svi brojevi su zapisani u binarnom formatu, a ti možeš da ih predstavljaš u decimalnom (uobičajeno), u heksadecimalnom (0xbroj) ili oktalnom (0broj).

Citat:
2) Koja je sustinska razlika izmedju predavanja vrednosti by value i by reference.


Pa, pass by value kopira promenljivu u privremenu promenljivu što onemogućava izmenu originalne promenljive unutar funkcije. Dodatna razlika je u tome što kad prenosiš neke veće objekte (tipa strukture ili klase), to kopiranje oduzima znatno više vremena nego kopiranje samo adrese objekta (kao što je slučaj kod pass by reference).

Citat:
3) Zasto se neke promenljive kreiraju na slobodnom skladistu umesto (standardno) na steku ?


Ovo pitanje nisam baš najbolje razumeo, ali pokušaću da ti odgovorim...

Citat:
Autor o ovome kaze :
" Prednost pristupanja memoriji na ovaj nacin, umesto koriscenja globalnih promenljivih, je to da samo funkcije sa pristupom pokazivacu imaju pristup podacima. Ovo obezbedjuje usko kontrolisan interfejs ka tim podacima i eliminise opasnost da neka funkcija promeni podatke na neocekivane i nepripremljene nacine."


Pa, daš funkciji pokazivač na neku tvoju promenljivu i on je izmeni. Kao drugu varijantu, možeš tu promenljivu da ostaviš kao globalnu, ali to generalno lakše dovodi do "neocekivanih i nepripremljenih" grešaka.

Citat:
a) Pokazivaci mogu da pokazuju i na podatke na steku, pa ne vidim kako ovo pominjanje pokazivaca doprinosi razumevanju znacaja slobodnog skladista.


Mogu, naravno, ali reč je o stacku koji se odnosi na lokalnu funkciju i o podacima koje daješ kao argumente.

Citat:
b) Pristup podacima, koliko sam do sada video, mozemo kontrolisati deklarisanjem metoda i promenljivih u objektu, kao private i public.
Znaci, ako treba da pristupimo nekom private podatku, pozvacemo, iz nase f-je pristupni metod datog objekta i to ce raditi i bez pokazivaca.


Prati ovaj kod:
Code:

#include <stdio.h>

void funkcija(int *a){
     *a = 5;
}

class A{
    private:
        int a;
    public:
        A(int aa):a(aa){};
        void pozovi(){
              funkcija(&a);
        };
        void print(){
              printf("a = %d\n",a);
        };
}

int main(){
     A *obj = new A(3);
     obj->print();
     obj->pozovi();
     obj->print();
     return 0;
}


Izlaz ovog "programa" bi bio:
Code:

a = 3
a = 5


U funkciji pozovi koja ima pristup privatnoj promenljivoj int a pozvana je eksterna funkcija koja sama po sebi nema pristup toj promenljivoj, ali joj je kao argument data adresa te promenljive, pa ona "neznajući da nema pristup" uspeva da je promeni. Ne znam da li si pohvatao u čemu je štos, ali potrudi se...

Ako ti ipak nešto nije jasno, piši ponovo, pa će neko da ti razjasni...

Poz!
F
... and the aliens sent an android down to earth, to slow down mankind's development
... and they named it Bill Gates.
 
Odgovor na temu

#Coder
Zagreb

Član broj: 21075
Poruke: 16
161.53.174.*



Profil

icon Re: pokazivaci20.02.2004. u 15:01 - pre 245 meseci
ok

ovak

zamislimo da imas vlastitu fju koja mora vratiti vise od jedne vrjednosti istovremeno

onda ti koristi return by reference:

zoves fju(&prvo, &drugo);

a ta fja prima parametre kao

fju(*prvo, *drugo){
// kod
}
Mess with the best and die like the rest
 
Odgovor na temu

[es] :: C/C++ programiranje :: pokazivaci

[ Pregleda: 3037 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

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