2010-07-10 5 views
4

J'ai essayé de résoudre ce problème toute la journée:Comment passer un double tableau à une fonction dans C?

Comment passer un double tableau à une fonction?

Voici un exemple:

int matrix[5][2] = { {1,2}, {3,4}, {5,6}, {7,8}, {9,10} }; 

Et je veux passer cette matrice à fonction nommée eval_matrix,

void eval_matrix(int ?) { 
    ... 
} 

Je ne peux pas savoir ce qui devrait être à la place de ?

Quelqu'un peut-il m'aider avec ce problème?

Je sais qu'un tableau peut être passé comme un pointeur, mais qu'en est-un double tableau (ou un tableau triple?)

Merci, Boda Cydo.

+1

double possible de http://stackoverflow.com/questions/2828648/how-to-pass-a-multidimensional-array-to-a-function-in-c-and-c –

Répondre

5

Pour être utilisable comme un tableau le compilateur doit connaître la foulée intérieure du tableau, il est donc soit:

void eval_matrix(int m[5][2]) { ... 

ou:

void eval_matrix(int m[][2], size_t od) { ... /* od is the outer dimension */ 

ou tout simplement:

void eval_matrix(int* p, size_t od, size_t id) { ... /* ditto */ 

Dans tous les cas, c'est du sucre syntaxique - le tableau est décomposé en pointeur.

Dans les deux premiers cas, vous pouvez référencer les éléments du tableau comme d'habitude m[i][j], mais vous devrez le décaler manuellement dans le troisième cas en tant que p[i*id + j].

+0

Merci, je utilisera la 3ème possibilité. – bodacydo

+0

qu'en est-il de 'int **'? –

+0

Qu'en est-il de 'int **'? La question a demandé comment passer 'int [] []' à une fonction. Ils sont tellement différents. –

-1

Vous ne devriez pas passer la totalité de la matrice, vous devriez plutôt passer le pointeur, mais vous devriez aussi passer la taille ... c'est comme ça que je le ferais, en supposant que ce soit toujours des paires [2].

struct pair { 
    int a, b; 
}; 

struct pair matrix[] = { {1,2}, {3,4}, {5,6}, {7,8}, {9,10} }; 

void eval_matrix(struct pair *matrix, size_t matrix_size) { 
    ... 
} 

eval_matrix(matrix, sizeof(matrix)/sizeof(struct pair); 
Questions connexes