web-dev-qa-db-fra.com

Passer une matrice dans une fonction (C)

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");
    }
}
6
Lc0rE

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 constpointer à 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);
18
user586399

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.

7
Jens Gustedt

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);
0
asam

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;
}
0
Prashant gaUtam

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

0
42n4