90 votes

Comment passer un tableau 2D (matrice) dans une fonction en C ?

Je dois également faire cela pour persister les opérations sur la matrice. Cela signifie-t-il qu'il doit être adopté par référence?

Cela suffira-t-il ?

void operate_on_matrix(char matrix[][20]);

21voto

Minhas Kamal Points 5582

Le moyen le plus simple de passer un tableau 2D de longueur variable

La technique la plus simple pour le C et le C++ est la suivante : passez un tableau 2D comme un tableau 1D, puis utilisez-le en tant que 2D dans la fonction.

 #include <stdio.h>

void func(int row, int col, int* matrix){
    int i, j;
    for(i=0; i<row; i++){
        for(j=0; j<col; j++){
            printf("%d ", *(matrix + i*col + j)); // or better: printf("%d ", *matrix++);
        }
        printf("\n");
    }
}

int main(){
    int matrix[2][3] = { {0, 1, 2}, {3, 4, 5} };
    func(2, 3, matrix[0]);

    return 0;
}

En interne, quel que soit le nombre de dimensions d'un tableau, C/C++ conserve toujours un tableau 1D. Et donc, nous pouvons passer n'importe quel tableau multidimensionnel comme celui-ci.

14voto

casablanca Points 41814

Je ne sais pas ce que vous entendez par "les données ne se perdent pas". Voici comment passer un tableau 2D normal à une fonction :

 void myfunc(int arr[M][N]) { // M is optional, but N is required
  ..
}

int main() {
  int somearr[M][N];
  ...
  myfunc(somearr);
  ...
}

3voto

shinxg Points 162

Tableau 2D :

 int sum(int array[][COLS], int rows)
{

}

Tableau 3D :

 int sum(int array[][B][C], int A)
{

}

Tableau 4D :

 int sum(int array[][B][C][D], int A)
{

}

et tableau nD :

 int sum(int ar[][B][C][D][E][F].....[N], int A)
{

}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X