Forum: Mikrocontroller und Digitale Elektronik Adresse von Strukturelement aus Zeiger auf Struktur ermitteln


von tobiflea (Gast)


Lesenswert?

Hallo,

ich stehe gerade vor der Frage, wie ich die Adresse von einem 
Strukturelement aus einem Zeiger auf diese Struktur ermitteln kann. Ich 
habe zwar eine Lösung, aber der Compiler bringt hier immer eine Warnung. 
Deshalb wollte ich mal fragen, ob man das auch schöner machen könnte.
Erstmal ein paar Details:

Ich habe einen Typ folgendermaßen definiert (verinfachtes Beispiel):

typedef struct
{
  unsigned int data_length_w;
  unsigned char* data_pc;
} structure_t_s;

Einer Funktion test(...) wird ein Zeiger auf eine Variable von diesem 
Typ structure_t_s übergeben. Innerhalb dieser Struktur rufe ich eine 
Funktion test_2(...) auf, der ich einen Zeiger auf das Strukturelement 
data_length_w übergeben muss:


void test(structure_t_s* test_ps)
{
  test_2(&(test_ps->data_length_w));  // <-- Hier kommt immer die 
compiler-Warnung "supsicuous pointer conversion"
}

void test_2(unsigned int* zahl_pw)
{
  //...
}

Hat jemand eine Idee, wie ich so etwas besser lösen könnte?

Mfg tobiflea

von MaWin (Gast)


Lesenswert?

test_2 vor test deklarieren.

von ozo (Gast)


Lesenswert?

Hi,
eventuell mit 'offsetof' ?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Der Ansatz sieht soweit in Ordnung aus, genau so macht man so etwas.

Es gibt nicht zufälligerweise einen von der Implementierung abweichenden 
Prototyp der Funktion test_2?

Ändert sich das Warnungsverhalten des Compilers, wenn Du
1
void test(structure_t_s* test_ps)
2
{
3
  unsigned int* p;
4
5
  p = &(test_ps->data_length_w);
6
  test_2(p);
7
}
schreibst?

von Stefan (Gast)


Lesenswert?

Zeiger subtrahieren? Ist zwar eine cast Orgie aber dann ist sogar das 
alignment egal.
Stefan

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.