[ Srki_82 @ 28.11.2004. 02:41 ] @
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.
[ Milos Stojanovic @ 28.11.2004. 03:15 ] @
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);
[ Srki_82 @ 28.11.2004. 03:23 ] @
Bas ono sto mi treba!
Postovanje pitanja na pravi forum stvarno pomaze :)
[ Riste Pejov @ 29.11.2004. 10:01 ] @
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;
     }
}