Forum: PC-Programmierung casten von Zeigern auf Strukturen


von Sam (Gast)


Lesenswert?

Hallo, ich möchte einen Zeiger auf eine Struktur in einen Zeiger casten.
Mein derzeitiger Code habe ich im folgenden niedergeschrieben. 
"diag_data_ptr" soll auf "diag_data" von "get_slave_diag_con_ptr" 
zeigen. Was muss ich ändern damit es funktioniert?

Danke!

Gruß
Samuel
1
typedef struct _T_DP_DIAG_DATA
2
{
3
   OCTET      station_status_1;                 
4
   OCTET      station_status_2;                           
5
   OCTET      station_status_3;                      
6
   USIGN8     master_add;    
7
   USIGN16    ident_number;           
8
   OCTET      ext_diag_data [DP_MAX_EXT_DIAG_DATA_LEN];  
9
10
} T_DP_DIAG_DATA;
11
12
13
14
typedef struct _T_DP_GET_SLAVE_DIAG_CON
15
{
16
   USIGN16          status;                                  
17
   USIGN8           rem_add;                                   
18
   USIGN8           dummy;                
19
   INT16            diag_entries;        
20
   USIGN16          diag_data_len;      
21
   T_DP_DIAG_DATA   diag_data;                           
22
23
} T_DP_GET_SLAVE_DIAG_CON;
24
25
main()
26
{
27
   T_DP_GET_SLAVE_DIAG_CON   FAR* get_slave_diag_con_ptr
28
   T_DP_DIAG_DATA    FAR *diag_data_ptr;
29
30
   diag_data_ptr = (T_DP_DIAG_DATA FAR*) (get_slave_diag_con_ptr)
31
}

: Bearbeitet durch User
von Karl H. (kbuchegg)


Lesenswert?

Wenn du das tun musst, ist meistens etwas komplett faul.

Denn ein T_DP_GET_SLAVE_DIAG_CON ist nun mal kein T_DP_DIAG_DATA . Es 
macht daher auch keinen Sinn, dem Compiler vorzulügen, das dem so wäre.

Was willst du wirklich tun? Bzw. welche Situation hast du tatsächlich?

Aus der Beobachtung, dass ein T_DP_GET_SLAVE_DIAG_CON Objekt einen 
Member vom Typ T_DP_DIAG_DATA enthält, schliesse ich, dass du eigentlich 
etwas ganz anderes willst, nämlich einen Pointer auf diesen Member 
einrichten
1
main()
2
{
3
   T_DP_GET_SLAVE_DIAG_CON * get_slave_diag_con_ptr;
4
   T_DP_DIAG_DATA          * diag_data_ptr;
5
6
...
7
8
   diag_data_ptr = get_slave_diag_con_ptr->diag_data;
9
}

: Bearbeitet durch User
von Fred (Gast)


Lesenswert?

diag_data_ptr = &get_slave_diag_con_ptr->diag_data;

von Sam (Gast)


Lesenswert?

Hallo,
Danke!
ja genau ich möchte einen pointer auf diesen member einrichten.

Bei:

diag_data_ptr = (T_DP_DIAG_DATA    FAR *) 
get_slave_diag_con_ptr->diag_data;

bringt mein mingw compiler allerdings folgende Fehlermeldung:

error: cannot convert to a pointer type diag_data_ptr = diag_data_ptr = 
(T_DP_DIAG_DATA    FAR *) get_slave_diag_con_ptr->diag_data;


Was muß ich tun, das es ohne Fehler compiliert werden kann?

Gruß
Samuel

von Fred (Gast)


Lesenswert?

Die Antworten lesen und umsetzen. Nicht einfach selbst irgendwas 
erfinden.

von Karl H. (kbuchegg)


Lesenswert?

Fred schrieb:
> diag_data_ptr = &get_slave_diag_con_ptr->diag_data;


Danke für die Korrektur.
Hab ich im Eifer des Gefechts vergessen.

: Bearbeitet durch User
von Karl H. (kbuchegg)


Lesenswert?

Fred schrieb:
> Die Antworten lesen und umsetzen. Nicht einfach selbst irgendwas
> erfinden.

Und ein C-Buch durcharbeiten.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.