Also, mal ganz von vorne:
Ein Pointer ist ein Zeiger, der auf eine bestimmte Speicherstelle zeigt, man kann ihn neu zuweisen, also ihn auf eine andere Speicherstelle verweisen lassen und die Daten, die sich an der Speicherstelle, auf die er zeigt, befinden, manipulieren.
Hier mal ein Beispiel:
Code:
int i = 50; //i = 50
int *p = &i; //Zeiger p erstellen (*-Operator für Zeigerdekleration) und ihm die Adresse von i zuweisen (& ist der Adressoperator, mit ihm kommt man an die Adresse von i)
*p = 20; //i = 20, *p = 20 - *-Operator ist notwendig, da man dem Zeiger sonst eine neue Adresse zuweisen würde
int ii = 30;
p = ⅈ //*p = 30, ii = 30 - dem Zeiger eine neue Adresse (die von ii) zuweisen
p = NULL //den Zeiger, wenn er nicht mehr verwendet wird, auf NULL setzen
char acEinArray[256]; //Array mit 256 char-Elementen, Zugriff über z.B. acEinArray[50] = ...
char *p = acEinArray; //Zeiger p erstellen, der auf das Array zeigt (kein &-Operator, da acEinArray ohne []-Operator schon die Adresse ist!)
//p zeigt auf acEinArray[0], kann mit *p ausgelesen werden
p++; //p zeigt jetzt auf acEinArray[1]
So jetzt zu deinem Code:
Code:
*M [i] = ( (int16_t) responseBuffer[i] << 8 | (int16_t) responseBuffer[i+1] );
muss heißen:
Code:
M[i] = ( (int16_t) responseBuffer[i] << 8 | (int16_t) responseBuffer[i+1] );
da der []-Operator den Zeiger schon dereferenziert.
Und lass bei return *M; den *-Operator weg, damit die Adresse zurückgegeben wird und schreibe statt:
Code:
int itest2=m3dmg_getOrientationMatrix( &M );
Code:
int16_t *pitest2=m3dmg_getOrientationMatrix( &M );
Lesezeichen