Also arbeite ich derzeit mit einer Reihe von Strukturen, Zeigern und der Malloc-Funktion. So wie es aussieht, habe ich eine Struktur, die neben anderen Variablen einen Zeiger auf einen bestimmten Speicherplatz enthält, der mit der malloc-Funktion zugewiesen wurde.Versetze einen Zeiger auf einen Zeiger mit einer Zählvariablen
Ich benutze diesen Platz zum Speichern von Samples und deshalb verwende ich eine einfache Zählvariable, um zu verfolgen, wie viele Samples es gibt. Jetzt entstehen meine Schwierigkeiten durch die Schnittstelle mit meiner I2C-Funktion, die einen dreifachen Zeiger (signed char ***) verwendet, um die Daten zu speichern.
Um dies zu handhaben, verwende ich einen Doppelzeiger (signed char **), um auf den Speicherplatz von dem Zeiger in der Struktur angeboten und dann verwende ich die count-Variable, um diesen Zeiger zu verschieben.
Was ich finde ist, dass das Hinzufügen des Offsets einfach aus dem Speicher erhöht wird, wo der Anfangszeiger gehalten wird.
Die Codezeile, die ich versuche, dies zu erreichen, ist unten.
signed char** VAL_PTR = ((signed char**)(&mem.Accel.xBase)) + ((signed char) mem.Accel.SampleCount);
Kann jemand sehen, wo ich falsch liege? Jede Hilfe würde sehr geschätzt werden!
sein "*, die einen dreifachen Zeiger verwendet (signed char \ * \ * \ *) *" <- seien Sie nicht ein [Drei Star-Programmierer] (http://wiki.c2.com/?ThreeStarProgrammer). Tatsächlich sieht die einzelne Codezeile, die Sie präsentieren, zu komplex aus. Vielleicht sollten Sie sich mit der strengen Aliasing-Regel vertraut machen, in jedem Fall ** neu beginnen **, indem Sie zunächst Ihre Datenstrukturen und den Programmablauf entwerfen und auf ein ** einfaches ** Design abzielen. –
Wir müssen ein vollständiges (aber minimales) Beispiel sehen, das die Typen aller Variablen anzeigt und erklärt, was das erwartete Ergebnis ist und was Sie stattdessen erhalten. Das Zeigen mit Code ist besser als das Zeigen mit Wörtern. – interjay