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:

    neighFaces ist ein Array von Zeigern auf sFace . neighFaces[1] greift also auf den zweiten Zeiger zu.

    faces ist ebenfalls ein Array von Zeigern auf sFace .

    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 ).


Anmelden zum Antworten