55 votes

Manière correcte de passer un tableau à 2 dimensions dans une fonction

J'ai un tableau à 2 dimensions et je le passe dans une fonction pour effectuer certaines opérations. J'aimerais savoir comment procéder correctement...

 #define numRows 3
#define numCols 7
#define TotalNum (numRows*numCols)
int arr[numRows][numCols] = {{0,1,2,3,4,5,6}, {7,8,9,10,11,12,13},{14,15,16,17,18,19,20}};

void display(int **p)
{
    printf("\n");
    for (int i = 0; i< numRows;i++)
    {
        for ( int j = 0;j< numCols;j++)
        {
            printf("%i\t",p[i][j]);
        }
        printf("\n");
    }
}

int main() {
    display(arr);
}

j'obtiens un message d'erreur :

 'display': cannot convert parameter1 from 'int' to 'int*'

Est-ce la bonne façon de passer un tableau à 2 dimensions dans une fonction ? Si non, quelle est la bonne méthode ?

72voto

cnicutar Points 98451

Vous devez déclarer votre fonction comme ceci :

 void display(int p[][numCols])

Cette FAQ C explique en détail pourquoi. L'essentiel est que les tableaux se désintègrent en pointeurs une fois , cela ne se produit pas de manière récursive. Un tableau de tableaux se décompose en un pointeur vers un tableau, pas en un pointeur vers un pointeur.

6voto

Varun Chhangani Points 152

Vous faites mal. Vous pouvez passer un tableau 2D à l'aide d'un pointeur vers un tableau, ou simplement passer un tableau ou via un pointeur unique.

 #define numRows 3
#define numCols 7
void display(int (*p)[numcols],int numRows,int numCols)//First method//
void display(int *p,int numRows,int numCols) //Second Method//
void display(int numRows,int numCols,int p[][numCols])  //Third Method
{
    printf("\n");
    for (int i = 0; i < numRows;i++)
    {
        for ( int j = 0; j < numCols;j++)
        {
            printf("%i\t",p[i][j]);
        }
        printf("\n");
    }
}

int main() {
    display(arr,numRows,numCols);
}

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