Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Zeiger und deren Interpretation

Empfohlene Antworten

Veröffentlicht

Ich habe gerade ein Problem Zeigern. Kurz sikzziert sieht es in etwa so aus:


abc_t* variable;    // abc_t ist ein struct mit typedef

uint8_t* bytes;     // uint8_t ist im prinzip ein alias für char


variable = (abc_t*) methodeDieEinVoidZeigerLiefert();

bytes = (uint8_t) variable;

Wenn ich jetzt Änderungen an der Struktur von variable vornehme, sollte sich doch der Inhalt von bytes ebenfalls ändern, oder?

Wenn ich jetzt Änderungen an der Struktur von variable vornehme, sollte sich doch der Inhalt von bytes ebenfalls ändern, oder?
Du bewegst dich da im Bereich des undefinierten Verhalten, aber üblicherweise ist das so.

Was ist denn jetzt konkret das Problem?

  • Autor

Das ich die Änderungen nicht in dem zweiten Zeige sehe.

Gibt es für so etwas einen standartisiertes Vorgehen? Ich will die Daten (des Structs) übertragen und mir vorher die Bytes ansehen.

Das ich die Änderungen nicht in dem zweiten Zeige sehe.
Was für Änderungen? Was meinst du mit "sehen"?

Gibt es für so etwas einen standartisiertes Vorgehen? Ich will die Daten (des Structs) übertragen und mir vorher die Bytes ansehen.
Was meinst du mit "ansehen"?
  • Autor

Das struct hat ein 16 bit Feld. Gesehen als byte-Array sind das ist {0,0}. Wenn ich dem Attribut den Wer 100 zuweise, dann wollte ich als byte-Array {0,100} erhalten - das meine ich mit sehen.

Das struct wird byteweise versendet. Bevor ich es auf der Empfängerseite rekonstruiere, will prüfen, ob auch die richtigen Daten gesendet werden.

Das struct hat ein 16 bit Feld.
Sonst nichts? Falls doch: Ist dir klar, dass der Compiler gegebenfalls fürs Alignment Füllbytes in deine Struktur packt? Guckst du sicher an der richtigen Stelle ins Array?

Wenn ich dem Attribut den Wer 100 zuweise, dann wollte ich als byte-Array {0,100} erhalten
Oder {100,0}, je nach Endianness des Systems - die binäre Repräsentation im Speicher ist nicht standardisiert.

das meine ich mit sehen.
Du hast meine Frage nicht verstanden. Es geht darum, wie du den Inhalt dieses Arrays prüfst. Hast du da ein if im Code, oder lässt du dir das irgendwie ausgeben, oder benutzt du einen Debugger? Gesehen (also mit den Augen) habe ich Bytes bisher noch nicht ;)
  • Autor
Sonst nichts? Falls doch: Ist dir klar, dass der Compiler gegebenfalls fürs Alignment Füllbytes in deine Struktur packt? Guckst du sicher an der richtigen Stelle ins Array?

Natürlich hat das struct noch ein paar Felder mehr. Eines der Felder ist ein Pointer auf eine andere Datenstruktur.

Oder {100,0}, je nach Endianness des Systems - die binäre Repräsentation im Speicher ist nicht standardisiert.

Ist klar.

Ich lasse mir das Array in einer Schleife via printf ausgeben - Debugger oder änhliches ist auf der Plattform etwas komplizierter.

  • Autor

Andere Frage zum Verständnis. Die beiden gekennzeichneten Ausgaben sollten doch die selben Werte liefern, oder?


for (i = 0; i < neighbourtable.numNeighbours; i++) {

  #ifdef SHOW_PRINTF

  printf("append neigh: %d@%lu\n", neighbourtable.entries[i].info.nodeId, neighbourtable.entries[i].info.sqn);

  printfflush();

  #endif

  memcpy(neighbourhood->entries + i, &neighbourtable.entries[i].info,sizeof(neighbour_info_entry_t));				

  #ifdef SHOW_PRINTF

  printf("appended:  %d::%d@%lu\n",i, neighbourhood->entries[i].nodeId, neighbourhood->entries[i].sqn); // AUSGABE 1

  #endif

}


for (i = 0; i < neighbourtable.numNeighbours; i++) {

  #ifdef SHOW_PRINTF

  printf("check neigh %d: %d@%lu\n",i, neighbourhood->entries[i].nodeId, neighbourhood->entries[i].sqn);  // AUSGABE 2

  printfflush();

  #endif

}

Okay, dann kann ich aufhören an mir zu zweifeln - dann versteh ich die Welt nicht mehr.
Dann gib uns doch mal die Möglichkeit, dir zu helfen, indem du das konkrete Problem beschreibst. Am besten mit einem Minimalbeispiel, das den Fehler reproduziert.

Das Herumgeeiere mit Verständnisfragen bringt dich ja offensichtlich nicht weiter.

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.