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);
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;
}
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