PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [C] struct + pointer Zugriffs Problem



peecee
16-11-2004, 17:53
Hi,

ein bisschen Code zum Verständnis, frage kommt unten.


typedef struct list_s {
void *data;
struct list_s *next;
} list_t;

list_t* list; /*list entry point*/

void list_test() {

uint d1;
uint d2;

list = list_insert(list, 0);
list = list_insert(list, 1);

list[1].data = &d1;
list[0].data = &d2;
list[1].data = 1; /*Zugriff nur wie??*/
list[0].data = 2; /*Zugriff nur wie??*/
}


Wie kann ich auf list[x].data dem vorher die Adresse eines int zugewiesen wurde zugreifen, also den Wert der Variable ändern und nicht seine Adresse?



list[0].*data = 1;
list[0].(*data) = 1;

Obige Beispiele funktionieren nicht, versteh das nicht!

MfG peecee

anda_skoa
16-11-2004, 18:00
Die Adresse auf uint* casten und dann *var = wert

Übrigens: falls list nicht gerade der Anfang einens list_t Arrays ist, solltest du vielleicht keinen Arrayzugriff darauf machen :)

Ciao,
_

peecee
16-11-2004, 18:28
Danke @anda_skoa

wie du gesagt hast so gehts


*(uint*)list[0].data = 1;


aber warum muss ich eigentlich einen cast durchführen,
data ist ja ein void pointer müsste doch auch so gehen oder?


*list[0].data = 1;

peecee
16-11-2004, 18:30
*Postingschind* list ist der Beginn eines list_t Arrays :D

anda_skoa
16-11-2004, 19:20
aber warum muss ich eigentlich einen cast durchführen,
data ist ja ein void pointer müsste doch auch so gehen ode

Auf void kann man schwer was zuweisen, nicht?

Ciao,
_

panzi
16-11-2004, 22:09
Interesannt find ich ja: Du hast da ein Array von Listen? Warum das?

peecee
17-11-2004, 17:11
ach ja, der Array Operator ist nicht richtig, danke das ihr mir das bewusst gemacht habt!

Ich habe fälschlicherweise angenommen das alle Elemente der Liste hintereinander im Speicher liegen :eek:

MfG