Übergabe einer Matrix in einer Funktion (C)

Lesezeit: 4 Minuten

Benutzeravatar von Lc0rE
Lc0rE

Ich habe ein Problem beim Übergeben einer Matrix an eine Funktion in C. Es gibt die Funktion, die ich erstellen möchte:

void ins (int *matrix, int row, int column);

aber mir ist aufgefallen, dass matrix mir im Gegensatz zu den Vektoren einen Fehler gibt. Wie kann ich meine Matrix so an eine Funktion übergeben?

EDIT –> da ist der Code:

// Matrix

#include <stdio.h>
#define SIZE 100

void ins (int *matrix, int row, int column);
void print (int *matrix, int row, int column);

int main ()
{
    int mat[SIZE][SIZE];
    int row, col;

    printf("Input rows: ");
    scanf  ("%d", &row);
    printf("Input columns: ");
    scanf  ("%d", &col);

    printf ("Input data: \n");
    ins(mat, row, col);

    printf ("You entered: ");
    print(mat, row, col);

    return 0;
}

void ins (int *matrix, int row, int column);
{
    int i, j;

    for (i = 0; i < row; i++)
    {
        for (j = 0; j < column; j++)
        {
            printf ("Row %d column %d: ", i+1, j+1);
            scanf  ("%d", &matrix[i][j]);
        }
    }
}

void print (int *matrix, int row, int column)
{
    int i;
    int j;

    for(i=0; i<row; i++)
    {
        for(j=0; j<column; j++)
        {
            printf("%d ", matrix[i][j]);
        }
        printf("\n");
    }
}

  • Wie groß sind die Abmessungen Ihrer Matrix? Ist es 1D oder 2D?

    Benutzer586399

    11. Juli 2012 um 8:34 Uhr


  • Mögliches Duplikat stackoverflow.com/questions/546860/…

    – Ulterior

    11. Juli 2012 um 8:40 Uhr

Sie müssen einen Zeiger mit so vielen Indirektionsebenen übergeben (*) als Anzahl der Dimensionen Ihrer Matrix.

Wenn Ihre Matrix beispielsweise 2D ist (z. B. 10 mal 100), dann:

void ins (int **matrix, int row, int column);

Wenn Sie eine feste Dimension haben (z. B. 100), können Sie auch Folgendes tun:

void ins (int (*matrix)[100], int row, int column);

oder in deinem Fall:

void ins (int (*matrix)[SIZE], int row, int column);

Wenn beide Maße feststehen:

void ins (int matrix[10][100], int row, int column);

oder in deinem Fall:

void ins (int matrix[SIZE][SIZE], int row, int column);

  • Vielen Dank. Wie muss ich den Code ändern, wenn ich eine konstante Größe (siehe meine Änderungen) definiert habe?

    – Lc0rE

    11. Juli 2012 um 8:38 Uhr

  • Es ist nicht möglich, ein 2D-Array wie im Beispiel des OP durch “einen Zeiger mit so vielen Indirektionsebenen” zu übergeben

    als die Anzahl der Dimensionen Ihrer Matrix”. Dieser Teil der Antwort ist völlig falsch.

    – AnT steht zu Russland

14. November 2021 um 20:04 Uhr

void ins (size_t rows, size_t columns, int matrix[rows][columns]);

Wenn Sie einen modernen C-Compiler haben, können Sie für 2D-Matrizen beliebiger Größe Folgendes tun

Wichtig ist, dass die Größen vor der Matrix stehen, damit sie dort bekannt sind. matrix[i][j] Innerhalb Ihrer Funktion können Sie dann einfach auf die Elemente zugreifen

und der Compiler führt alle Indexberechnungen für Sie durch.

void ins (int matrix[][100], int row, int column);

es wäre auch möglich, die erste Dimension leer zu lassen, genauso wie (*matrix):
Benutzeravatar von Prashant gaUtam

Prashant gaUtam

#include <stdio.h>
#include <stdlib.h>
#include <stdio.h>

void fun(int **arr,int m,int n)
{
    int i, j;
    for (i = 0; i < m; i++)
    {
    for (j = 0; j < n; j++)
        {
            scanf("%d", &arr[i][j]);
        }
    }

}

int main()
{
    int i,j,m,n;
    printf("enter order of matrix(m*n)");
    scanf("%d*%d",&m,&n);
    int **a=(int **)malloc(m*sizeof(int));
    for(i=0;i<n;i++)
        a[i]=(int *)malloc(n*sizeof(int));

    fun(a,m,n);
    for (i = 0; i < m; i++)
    {
    for (j = 0; j < n; j++)
        {
        printf("%d ", a[i][j]);
        }
        printf("\n");

    }
    return 0;
}

 output:
     #include <stdio.h>
#include <stdlib.h>
#include <stdio.h>

void fun(int **arr,int m,int n)
{
    int i, j;
    for (i = 0; i < m; i++)
    {
    for (j = 0; j < n; j++)
        {
            scanf("%d", &arr[i][j]);
        }
    }

}

int main()
{
    int i,j,m,n;
    printf("enter order of matrix(m*n)");
    scanf("%d*%d",&m,&n);
    int **a=(int **)malloc(m*sizeof(int));
    for(i=0;i<n;i++)
        a[i]=(int *)malloc(n*sizeof(int));

    fun(a,m,n);
    for (i = 0; i < m; i++)
    {
    for (j = 0; j < n; j++)
        {
        printf("%d ", a[i][j]);
        }
        printf("\n");

    }
    return 0;
}

Viel besserer Weg, um die malloc-Funktion zu verwenden und ein dynamisch zugewiesenes Array zu erstellen und mit dem 2D-Array zu tun, was immer Sie tun möchten:
Benutzeravatar von Souvik Roy

Souvik Roy

void inputmat(int r,int c,int arr[r * sizeof(int)][c * sizeof(int)])

1432920cookie-checkÜbergabe einer Matrix in einer Funktion (C)

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy