J'ai un problème en passant une matrice à une fonction en C. Voici la fonction que je veux créer:
void ins (int *matrix, int row, int column);
mais j'ai remarqué que contrairement aux vecteurs, la matrice me donne une erreur. Comment puis-je passer ma matrice à une fonction alors?
EDIT -> il y a le 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");
}
}
Vous devez indiquer le nombre de dimensions en tant que pointeurs.
c'est-à-dire si votre matrice est en 2D (10 sur 100), alors:
void ins (int **matrix, int row, int column);
mais le précédent est faux, car tout tableau 2D statique nécessite que le deuxième niveau de pointeurs soit const
pointer à tableau statique. L'en-tête précédent serait correct si la matrice est un tableau dynamique. donc le correct est:
void ins (int (*matrix)[100], int row, int column);
ou dans votre cas:
void ins (int (*matrix)[SIZE], int row, int column);
ou simplement:
void ins (int matrix[10][100], int row, int column);
ou dans votre cas:
void ins (int matrix[SIZE][SIZE], int row, int column);
Si vous avez un compilateur C moderne, vous pouvez effectuer les opérations suivantes pour les matrices 2D de toutes tailles
void ins (size_t rows, size_t columns, int matrix[rows][columns]);
L'important est que les tailles viennent avant la matrice, de sorte qu'elles y soient connues.
Dans votre fonction, vous pouvez alors accéder facilement aux éléments en tant que matrix[i][j]
et le compilateur effectue tous les calculs d'index pour vous.
il serait également possible de laisser la première dimension vide, la même chose que (* matrice):
void ins (int matrix[][100], int row, int column);
Meilleure façon d'utiliser la fonction malloc et de créer un tableau alloué dynamiquement et de faire ce que vous voulez faire à l'aide du tableau 2d:
#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;
}
C - Allouer une matrice dans une fonction
Ci-dessus, vous trouverez un programme que j’ai réalisé avec des fonctions d’allocation et de manipulation des matrices de toutes les manières possibles pour C (gcc C11/C99).