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 programiranje :: Imam pointer na prvi element... treba da predjem na sledeci, ali ne znam velicinu elementa

[ Pregleda: 714 | Odgovora: 3 ]

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Srki_82
Srdjan Tot
Me @ My Home
Ljubljana

Član broj: 28226
Poruke: 1402
82.208.201.*

ICQ: 246436949


Profil

icon Imam pointer na prvi element... treba da predjem na sledeci, ali ne znam velicinu elementa28.11.2004. u 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.
DirectX na srpskom | GLScene na srpskom

There are only 10 types of people in this world; those who understand binary and those who don't.
28.11.2004. u 02:41 

Milos Stojanovic
Belgrade

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

ICQ: 282954730
Sajt: www.sietf.org


Profil

icon Re: Imam pointer na prvi element... treba da predjem na sledeci, ali ne znam velicinu elementa28.11.2004. u 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);

ex. trooper
Oh goody... it's my Illudium PU-36 Explosive Space Modulator!
Softversko Inženjerstvo
♪♫♪
28.11.2004. u 03:15 

Srki_82
Srdjan Tot
Me @ My Home
Ljubljana

Član broj: 28226
Poruke: 1402
82.208.201.*

ICQ: 246436949


Profil

icon Re: Imam pointer na prvi element... treba da predjem na sledeci, ali ne znam velicinu elementa28.11.2004. u 03:23
Bas ono sto mi treba!
Postovanje pitanja na pravi forum stvarno pomaze :)
DirectX na srpskom | GLScene na srpskom

There are only 10 types of people in this world; those who understand binary and those who don't.
28.11.2004. u 03:23 

Riste Pejov
Team Leader/Senior Software Developer @ Ein-Sof ltd S..
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
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.
29.11.2004. u 10:01 

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

[ Pregleda: 714 | Odgovora: 3 ]

Postavi temu Odgovori

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