Porblem Arraypointer
-
Hi, ich habe ein Problem mit eienm Array von Pointers
Zuerst mal meine Klassen:
struct sFace { sPoint* points[2]; sCell* neighCells[2]; sFace* neighFaces[4]; double* neighPe[4]; double* neighF[4];} struct sCell { sFace* faces[4]; sPoint* points[4]; sCell* neighCells[4]; } and curFace = &data->faces[faceId]; curCell = &data->cells[cellId];Meien 1. Frage ist, warum ich den & Operator in
curFace->neighFaces[1]&= curFace->neighCells[1]->faces[1];nicht benutzen darf um die Adresse zuzuweisen
Meien 2. Frage: In
curFace->neighPe[XP] = &curFace->neighFaces[XP]->Pe[0];muss ich den &-Operator benutzen, aber bei
x=fabs(curFace->neighPe[XP]);meckert der Compiler, dass
'convert 'double*' to 'double' for argument '1' to 'double fabs(double)'
KAnn mir irgendwer weiterhelfen?
-
NicolasKuchen schrieb:
bei
x=fabs(curFace->neighPe[XP]);meckert der Compiler, dass
'convert 'double*' to 'double' for argument '1' to 'double fabs(double)'
KAnn mir irgendwer weiterhelfen?Das ist doch einigermaßen offensichtlich:
curFace->neighPe[XP] ist vom Typ double*
die Funktion fabs möchte aber ein Argument vom Typ double
-
NicolasKuchen schrieb:
Meien 1. Frage ist, warum ich den & Operator in
curFace->neighFaces[1]&= curFace->neighCells[1]->faces[1];nicht benutzen darf um die Adresse zuzuweisen
Erstens: Rechtschreibung, Punktsetzung. Was stimmt mit den Leuten in letzter Zeit eigentlich nicht? Wollen Programme schreiben, kriegen aber nicht einmal einen vernünftigen Satz raus.
Zweitens: Hast du dir deinen Code mal genau angeschaut?
<Pause>
Wenn du jetzt spontan "Ja" gesagt hast, heißt das entweder, dass du lügst, oder dass du die Programmiersprache noch nicht kannst. Und dann solltest du nochmal gründlich in dein Lehrbuch schauen.
Analysieren wir:
neighFacesist ein Array von Zeigern aufsFace.neighFaces[1]greift also auf den zweiten Zeiger zu.facesist ebenfalls ein Array von Zeigern aufsFace.Spricht, wenn man auf beide Arrays zugreift, sind ihre Typen (Zeiger auf
sFace) kongruent.Wieso du jetzt einem Zeiger die Adresse eines Zeigers und nicht den Zeiger selbst zuweisen willst, weißt wahrscheinlich nicht mal du. Ich weiß es in jedem Fall nicht. Zumal du auch eine völlig falsche Syntax verwendest, was du machst, ist nämlich ein bitweises AND mit Zuweisung (
&= x), nicht die Zuweisung einer Adresse (= &x).