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

Imam pointer na prvi element... treba da predjem na sledeci, ali ne znam velicinu elementa

[es] :: C/C++ programiranje :: Imam pointer na prvi element... treba da predjem na sledeci, ali ne znam velicinu elementa

[ Pregleda: 2295 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Srki_82
Srdjan Tot
Me @ My Home
Ljubljana

Član broj: 28226
Poruke: 1403
82.208.201.*

ICQ: 246436949


+10 Profil

icon Imam pointer na prvi element... treba da predjem na sledeci, ali ne znam velicinu elementa28.11.2004. u 02:41 - pre 236 meseci
Ovako... moja funkcija dobija pointer na listu nekih elemenata. Kada znam da je svaki element u nizu int onda mogu da uradim nesto kao:

neka petlja
{
*data = 1;
++data;
}

Ono ++data ce mi prebaciti pointer na sledeci element kada je data definisan kao:

int* data;

ali moja funkcija prima parametar tipa void* data jer treba da moze da primi pointer na bilo koju listu elemenata. U mom slucaju svaki element ce sigurno biti bar 3 bajta velicine i ta prva tri bajta bih zeleo da menjam u mojoj funkciji. Dakle, funkcija bi trebala da radi nesto ovako:

data je pokazivac na listu elemenata nepoznate velicine (sigurno bar 3 bajta velicine)
prva tri bajta menja na recimo 1, ostatak ostavlja nepromenjen
prelazi na sledeci element (++data ovde bac nece pomoci jer je data definisan kao void* data)

i to se ponavlja odredjen broj puta. Uvek znam tacno koliko elemenata ima u nizu tako da znam i koliko puta treba da prelazim na sledeci element jedino sto ne znam kako je kako da predjem na sledeci element.
 
Odgovor na temu

Milos Stojanovic
Belgrade

Član broj: 10343
Poruke: 1864
*.nat-pool.bgd.sbb.co.yu.

ICQ: 282954730
Sajt: www.sietf.org


+7 Profil

icon Re: Imam pointer na prvi element... treba da predjem na sledeci, ali ne znam velicinu elementa28.11.2004. u 03:15 - pre 236 meseci
Pa ako ne znaš veličinu jednog elementa niza, teško možeš da pređeš na sledeći. Možda ako znaš da svaki element počinje recimo nekim kodom, ili tako nešto.
Taj void* castuj u char*, tako ti je lakše da se krećeš kroz taj niz, ali moraš da znaš neku karakteristiku elemenata niza (ovo: "svaki element ce sigurno biti bar 3 bajta" ti ne znači puno)
Naravno, ako znaš veličinu jednog elementa niza (neka je to n)i ako ti je void* p pokazivač na neki element niza, onda na sledeći element možeš da skačeš na primer ovako (ako već hoćeš da čuvaš p kao void*):
Code:
     p = (void*)((char*)p+n);

ex. trooper
Oh goody... it's my Illudium PU-36 Explosive Space Modulator!
Softversko Inženjerstvo
♪♫♪
 
Odgovor na temu

Srki_82
Srdjan Tot
Me @ My Home
Ljubljana

Član broj: 28226
Poruke: 1403
82.208.201.*

ICQ: 246436949


+10 Profil

icon Re: Imam pointer na prvi element... treba da predjem na sledeci, ali ne znam velicinu elementa28.11.2004. u 03:23 - pre 236 meseci
Bas ono sto mi treba!
Postovanje pitanja na pravi forum stvarno pomaze :)
 
Odgovor na temu

Riste Pejov
Team Leader/Senior Software Developer @
Ein-Sof ltd Skopje
Skopje, Macedonia

Član broj: 128
Poruke: 571
217.16.77.*

Jabber: richie@bagra.net.mk
ICQ: 154236769
Sajt: riste.softver.org.mk


Profil

icon Re: Imam pointer na prvi element... treba da predjem na sledeci, ali ne znam velicinu elementa29.11.2004. u 10:01 - pre 236 meseci
Trooper ti je pomogao ali ipak ima boljeg nacina da se taj problem resi i da kod bude malo vise razumljiv. Evo u produzetku je jedno objektno orientirano resenje problema.

Ideja je da svaki od elementa u listi nosi informacijue o podataka i pointer ka sledecen node-u. Znaci ako imam tri tipa podataka onda ti treba neka deklaracija koja bi bila ovako:
Code:

//pseudo kod
.....
class covek{
    char ime[30];
    int age; 
}
class auto{
    char model[30];
    char tip[20];
    int kilometraza; 
}
class pas{
    char ime[30];
    char rasa[10];
}
class list_node{
     int data_type; // 1 - covek, 2 - auto, 3 - pas   
                    // jos bolje je da se ovo uradi sa enum tipom
     void* data;
     list_node* next;
}
.......
//funkcija za parsiranje liste
void func(list_node* head)
{
list_node* iter = head;
while(iter != NULL)
    {
      switch(iter->data_type){
             case 1: // tip podatka je covek
                    covek* covek1 = (covek*)iter->data;
                    cout<<covek1->ime;  
                    break;
             case 2: 
                          // ovde je auto
             case 3:
                          // ... pas
       }
      iter = iter->next;
     }
}



People who think they know everything tend to irritate those of us who do.
 
Odgovor na temu

[es] :: C/C++ programiranje :: Imam pointer na prvi element... treba da predjem na sledeci, ali ne znam velicinu elementa

[ Pregleda: 2295 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

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