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

Problem sa pristupom strukturama preko pointer (obican C)

[es] :: C/C++ programiranje :: Problem sa pristupom strukturama preko pointer (obican C)

[ Pregleda: 2473 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

ljube
Ljubiša Knežević
Banjaluka

Član broj: 22429
Poruke: 158
195.252.64.*



+2 Profil

icon Problem sa pristupom strukturama preko pointer (obican C)14.09.2004. u 20:34 - pre 238 meseci
Zdravo, imam sledece strukture kojima zelim da pristupim preko pointera:

Code:

typedef struct _PROPERTYITEM
{
  char  propName[255];
  char  curValue[255];
  int  nItemType;
  char  cmbItems[255];
  char  Description[255];
}PROPERTYITEM, *LPPROPERTYITEM;


typedef struct _PropertyDescriptor
{
  int      count;
  struct _PROPERTYITEM*  pit_pointer;
}PropertyDescriptor, *LPPROPERTYDESCRIPTOR;


U programu mi je potrebno da dinamicki kreiram broj PROPERTYITEM-a pa ih allociram kao:
Code:

static PropertyDescriptor PropertySpaceHoldeer;
static int     PropertySpaceHoldeerPointer; 
static int     p_items;
p_items =  24; // alociraj prostor za 24 property item-a
PropertySpaceHoldeer.pit_pointer=calloc(p_items+1,sizeof(PROPERTYITEM));


Problem mi je da ne znam kako da pridjem clanovima struktura.
Za clanove tipa char uspio sam to rijesiti kao:

Code:

strcpy(PropertySpaceHoldeer.pit_pointer->propName+(sizeof(PROPERTYITEM)*PropertySpaceHoldeerPointer), PropertyName);

gdje mi varijabla PropertySpaceHoldeerPointer pokazuje na indeks kojem zelim pristupiti ali ne znam kako da pridjem int clanu (nItemType) na odredjenom indeksu.

Ovo vjerovatno spada u pocetnicka pitanja, ali nikad do sada nisam imao potrebu radim sa pointerima na array jedne strukture koja se nalazi unutar druge.

Pokusao sam ovo:
PropertySpaceHoldeer.pit_pointer->nItemType = 2 // ovaj je na 0-tom indeksu i to je OK, ali kako de pristupim recimo 15 indeksu.

PropertySpaceHoldeer.pit_pointer->nItemType[15] = 2 // to ne radi :(

Pozdrav,
Ljubisa

 
Odgovor na temu

cicika
Tijana Dojčinović
Software Developer, GroundLink
Zemun

Član broj: 24659
Poruke: 3104
*.smin.sezampro.yu.



+4 Profil

icon Re: Problem sa pristupom strukturama preko pointer (obican C)14.09.2004. u 22:02 - pre 238 meseci
Citat:
PropertySpaceHoldeer.pit_pointer->nItemType[15] = 2 // to ne radi


To i ne može da radi s obzirom da ti je nItemType deklarisana kao celobrojna promenljiva a ne kao niz.
Use The Force!
“Who said anything about slicing you up? I just wanted to carve a little Z on your forehead — nothing serious.”
 
Odgovor na temu

Marko Stankovic

Član broj: 11
Poruke: 306
*.rvkds.net



Profil

icon Re: Problem sa pristupom strukturama preko pointer (obican C)14.09.2004. u 22:09 - pre 238 meseci
Samo si promasio mesto gde trebas staviti zagrade, ako zelimo da pristupimo 16. clanu u nizu, odnosno clanu sa indeksom 15 mozemo to uraditi ovako:

Code:

((PropertySpaceHoldeer.pit_pointer)+15)->nItemType = 2

a moze i ovako:
Code:

PropertySpaceHoldeer.pit_pointer[15].nItemType = 2

u prvom primeru mislim da ti nisu potrebne unutrasnje zagrade ali sam ih ja stavio za svaki slucaj jer sam zaboravio prioritete :) Ovo sto si ti napisao imalo bi neki smisao da je nItemType niz celih brojeva i time bi u taj niz upisao 2 na 16. mestu i to u strukturu koja je na prvom mestu tvog niza struktura (sta li sam sada rekao ni meni nije jasno :). U svakom slucaju ne bi uradio ono sto si mislio.
Da probam malo jasnije da odgovorim na sve ovo. Znaci tebi je PropertySpaceHoldeer.pit_pointer pokazivac na niz koji si alocirao. E sada kada hoces da pristupis nekom n elementu iz niza dovoljno je da taj pokazivac povecas za n. Odnosno

PropertySpaceHoldeer.pit_pointer+n

ovaj izraz ce pokazivati na n-ti clan. i sada samo dodas operator -> i to je to.
U drugom primeru mozemo slobodno koristiti operator '.' jer kada stavimo zagrade i indeks unutra mi dobijamo podatak na koji pokazuje pokazivac povecan za n (n je broj koji smo stavili u zagradi) a to je vec trazena struktura sa indeksom n i unutar nje pristupas sa tackom.


e da samo jedno pitanje, kod alociranja
Code:

PropertySpaceHoldeer.pit_pointer=calloc(p_items+1,sizeof(PROPERTYITEM))

sta ce ti p_items+1. To ce alocirati 25 mesta, a tebi je potrebno 24 koliko ja vidim.

Ako ti je nesto od ovog jasno vici da jos malo zakomplikujem ;)
poz
I drink to make other people interesting.
 
Odgovor na temu

Marko Stankovic

Član broj: 11
Poruke: 306
*.rvkds.net



Profil

icon Re: Problem sa pristupom strukturama preko pointer (obican C)14.09.2004. u 22:32 - pre 238 meseci
Hm sta se to desilo ovde jel nam se to filmil javlja iz buducnosti :) pise da je filmil poslao poruku 15.09. u 01:11 a trenutno je jos uvek 14. :)

evo i attachment cu ostaviti kao dokaz :)
I drink to make other people interesting.
Prikačeni fajlovi
 
Odgovor na temu

filmil
Filip Miletić
Oce Technologies B.V., inženjer
hardvera
Arcen, NL

Član broj: 243
Poruke: 2114
*.adsl.zonnet.nl

Jabber: filmil@jabber.org
ICQ: 36601391


+3 Profil

icon Re: Problem sa pristupom strukturama preko pointer (obican C)15.09.2004. u 00:11 - pre 238 meseci
Citat:
PropertySpaceHoldeer.pit_pointer-nItemType[15] = 2 // to ne radi :(
Ovo ti ne radi zato što je nItemType deklarisan kao int.

Pogledaj tabelu prioriteta operatora. Ovaj izraz je ekvivalentan sa:

Code:
((PropertySpaceHoldeer.pit_pointer)-nItemType)[15]
 
 
što je očigledno sintaksna greška, jer tražiš indeks od inta, a ne od niza.

Dobitna kombinacija:

Code:
PropertySpaceHoldeer.pit_pointer[15].nItemType
 
 
(operator „tačka“ ti treba jer je izraz ekvivalentan sa: (*(PropertySpaceHoldeer.pit_pointer + 15)).nItemType. )

f

[Ovu poruku je menjao filmil dana 15.09.2004. u 01:19 GMT]
 
Odgovor na temu

ljube
Ljubiša Knežević
Banjaluka

Član broj: 22429
Poruke: 158
81.93.74.*



+2 Profil

icon Re: Problem sa pristupom strukturama preko pointer (obican C)15.09.2004. u 10:00 - pre 238 meseci
PropertySpaceHoldeer.pit_pointer[p_index].nItemType radi odlicno.
Ja sam pokusavao sa PropertySpaceHoldeer.pit_pointer[p_index]->nItemType - ali naravno nije radilo.

Još uvijek ne razumijem najbolje kako ovo radi, čak je u suprotnosti sa nekom logikom kako sam ja mislio da treba, ali bitno je da radi, a ja ću ,malo eksperimentisati sa sličnim strukturama da shvatim ispravnu logiku.

Mnogo hvala svima!




Citat:

e da samo jedno pitanje, kod alociranja
Code:

PropertySpaceHoldeer.pit_pointer=calloc(p_items+1,sizeof(PROPERTYITEM))


sta ce ti p_items+1. To ce alocirati 25 mesta, a tebi je potrebno 24 koliko ja vidim.


Tacno, nek se nađe još jedan, za svaki slučaj (to je neki bug u mojoj glavi ali uvijek to radim - dodam još jedan)

 
Odgovor na temu

[es] :: C/C++ programiranje :: Problem sa pristupom strukturama preko pointer (obican C)

[ Pregleda: 2473 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

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