Zeiger auf Matrix an Funktion übergeben



  • hallo,

    ich sitze gerade vor folgendem Problem:

    ich möchte eine Matrix A[10][10] an eine Funktion übergeben mit Hilfe eines Zeigers.

    funktion(*A) funktioniert offenbar nicht, bzw. kriege ich es nur soweit hin das ich in der Funktion zugriff auf die Werte von A[0][0] bis A[0][9] habe.

    Ihc habe die Matrix so definiert

    double A[10][10]
    

    und die Funktion so:

    int Funktion(*double)
    

    In meiner Funktion habe ich dann mit:

    *(a+x)
    

    auf die ersten Elemente zugrgriffen, nur jetzt weiß ich nicht weiter.

    Wie komme ich also an die restlichen Werte?

    Gruß
    Klaus



  • diese Frage wurde schon mehrmals beantwortet!
    benutzt mal die Suchfunktion



  • ich weiß leider nicht wonach ich da noch suchen soll, denn weder "matrix pointer" noch "matrix zeiger" haben mir irgendeinen Treffer gebracht 😞



  • ich bin mir nicht sicher...
    int Funktion(**double) ?
    xD

    allerdings, kann es sein, dass du in der funktion per A[11] auf den wert von A[1][0] zugreifen kannst?



  • pixartist schrieb:

    ich bin mir nicht sicher...
    int Funktion(**double) ?
    xD

    Nope. Das funktioniert nicht. Bedenke: Ein Array ist kein Zeiger! Es ist lediglich so, dass du ein Array (unter Verwendung des Array-Namens) in einen Zeiger auf sein erstes Element casten kannst.

    @c_beginner: Wie du ja sicherlich weißt, liegt ein Array linear im Speicher. D.h. du kannst auch ein Mehrdimensionales Array, auf einem eindimensionales Vektor ausdrücken.
    An deinem Beispiel:

    #include <stdio.h>
    
    void print(const double* const vec, size_t x, size_t y)
    {
        size_t i, j;
        for(i = 0; i < y; ++i)
           for(j = 0; j < x; ++j)
              printf("v[%d]: %f; ", i * x + j, vec[i * x + j]);
    }
    
    #define x 2
    #define y 3
    
    int main(void)
    {
        double arr[y][x] = { { 0.9, 9.0 }, { 1.8, 18.0 }, { 2.7, 27.0 } };
        print(&arr[0][0], x, y);
        return 0;
    }
    

    /edit: jetzt ist das Programm hoffentlich C-konform...

    Gruß Caipi



  • mit **double klappt das leider nicht, oder ich habe dann irgendwo anders noch ienen Fehler drin.



  • @Caipi

    danke, Dein Beispiel hat mir zwar nicht direkt geholfen (genau so hatte ich es nämlich gemacht), aber mir ist dabei aufgefallen das ich einfach die Falschen Inhalte abgerufen hatte.

    meine Matrix ist a[10][10] gewesen, allerdings nur zu 1/4 gefüllt, hab da in der Funktion dann natürlich beim Hochzählen teilweise die uninitialisierten Werte ausgelesen.

    Da ich keine Ahnung habe wie ich die Matrixgröße abhängig mache von der "realen" Größe (die lese ich über eine Datei ein) muss ich mir da wohl in der Funktion nochmal was programmieren damit ich da nur die "relevanten" Werte habe.


Anmelden zum Antworten