Je suis en train d'écrire un programme de test simple pour passer des tableaux multidimensionnels. J'ai lutté pour obtenir la signature de la fonction d'appelé.S'il vous plaît aider avec le passage des tableaux multidimensionnels
Le code que j'ai:
void p(int (*s)[100], int n) { ... }
...
{
int s1[10][100], s2[10][1000];
p(s1, 100);
}
Ce code semble fonctionner, mais pas ce que je voulais. Je veux que la fonction p soit inconsciente si la gamme de valeurs est 100 ou 1000, mais devrait savoir qu'il y a 10 pointeurs (en utilisant la signature de fonction).
En tant que première tentative:
void p(int (*s)[10], int n) // n = # elements in the range of the array
et comme second:
void p(int **s, int n) // n = # of elements in the range of the array
Mais en vain puis-je pas à obtenir ce qu'ils fonctionnent correctement. Je ne veux pas coder en dur les 100 ou 1000 dans la signature, mais plutôt la transmettre, en gardant à l'esprit qu'il y aura toujours 10 tableaux.
De toute évidence, je veux éviter d'avoir à déclarer la fonction:
void p(int *s1, int *s2, int *s3, ..., int *s10, int n)
Pour votre information, je regarde les réponses à a similar question mais encore confus.
Alternativement, 'void p (int s [] [10], int n) ' – outis
@outis: Tout à fait correct. J'ai utilisé 'int (* s) [10]' en partie parce que j'imitais la question originale, et aussi parce que j'ai personnellement tendance à éviter les déclarations argumentées comme 'int s [] [10]' car elles induisent le lecteur en erreur étant passé à la fonction. –
Merci Dale. Cela semble être la bonne méthode pour appliquer ce que je voulais initialement. Le seul problème est la structure transposée qui gêne mon code. Il semble que l'autre réponse qui suggère de construire dynamiquement le tableau multidimensionnel et de passer dans la plage serait plus appropriée et plus claire à comprendre. – snap