2017-01-23 5 views
1

Ich habe eine Funktion, die nur einen (void*) Zeiger für die Datenübertragung hat. Aber ich muss zwei verschiedene Strukturen (struct A und struct B) gleichzeitig mit dem (void*) Zeiger übertragen. Ist es möglich, mit diesem Zeiger eine Struktur nach der anderen zu speichern und dann mit Strukturgrößen und Offset auf Daten zuzugreifen?Wie kann ich zwei separate Strukturen an eine Funktion übergeben, die einen einzelnen Zeiger akzeptiert?

+0

Haben Sie versucht, etwas selbst zu implementieren? –

+0

@GAURANGVYAS, ja, tat ich. Ich habe versucht, eine Art von Serialisierung zu machen. Aber ich habe es nicht geschafft. – Dropper

Antwort

5

Sie etwas tun könnte, wie:

struct C 
{ 
    struct A myA; 
    struct B myB; 
}; 

Füllen Sie die myA und myB Variablen in C, und dann einen Zeiger auf eine struct C in Ihrer Funktion übergeben.

2

Sie können eine struct erstellen, die zwei Zeiger hält, dann die Adresse einer Instanz dieser struct passieren:

typedef struct 
{ 
    struct A *a_ptr; 
    struct B *b_btr; 
} struct_with_two_pointers; 

... 

struct A a; 
struct B b; 

... 

struct_with_two_pointers X; 
x.a_ptr = &a; 
x.b_ptr = &b; 

someVoidFunc((void *) &X); 
2

Hinzufügen von Beispielcode-Schnipsel, ob das hilft.

typedef struct 
{ 
    int age; 
    int rollno; 
}struct_A; 

typedef struct 
{ 
    char name[10]; 
    int marks; 
}struct_B; 

typedef struct 
{ 
    struct_A a; 
    struct_B b; 
}struct_C; 

struct_C combined_struct = {{15,10}, {"Henry", 85}}; //Fill the structure here. 

someRandonFunction((void*) &combined_struct); //Pass it. 
Verwandte Themen