comment passer des tableaux entre des fonctions

Est-ce que quelqu’un peut m’aider? J’ai un problème avec un programme en C. C’est ici:

Dans ma partie principale, j’appelle une fonction (fonction A) où deux des arguments sont une deuxième fonction (fonction B) et des “données utilisateur” (qui peuvent en principe être un nombre, un caractère ou un tableau unique). Ces “données utilisateur” sont également un argument de la fonction B. Je dois tout faire fonctionner lorsque les “données utilisateur” sont un entier unique, mais je dois maintenant les utiliser comme un tableau. Donc, la structure de travail actuelle est la suivante:

static int FunB(...,void *userdata_) { int *a=userdata_; ... (here I use *a that in this case will be 47) ... } int main() { int b=47; funcA(...,FunB,&b) } 

Alors maintenant, je veux b dans l’essentiel comme un tableau (par exemple {3,45}) afin de transmettre plusieurs “données” à la fonction B.

Merci

Il y a au moins deux façons de le faire.

Premier

 static int FunB(..., void *userdata_) { int *a = userdata_; /* Here `a[0]` is 3, and `a[1]` is 45 */ ... } int main() { int b[] = { 3, 45 }; funcA(..., FunB, b); /* Note: `b`, not `&b` */ } 

Seconde

 static int FunB(..., void *userdata_) { int (*a)[2] = userdata_; /* Here `(*a)[0]` is 3, and `(*a)[1]` is 45 */ ... } int main() { int b[] = { 3, 45 }; funcA(..., FunB, &b); /* Note: `&b`, not `b` */ } 

Choisissez celui que vous préférez. Notez que la seconde variante est spécifiquement adaptée aux situations dans lesquelles la taille du tableau est fixe et connue au moment de la compilation (exactement 2 dans ce cas). Dans de telles situations, la seconde variante est préférable.

Si la taille du tableau n’est pas fixe, vous devez utiliser la première variante. Et bien sûr, vous devez passer cette taille à FunB manière FunB autre.

Faites attention à la manière dont le tableau est passé à funcA (soit sous la forme b soit sous la forme &b ) et comment il est accessible dans FunB (sous la a[i] ou (*a)[i] ) dans les deux variantes. Si vous ne le faites pas correctement, le code pourrait être compilé mais ne fonctionnera pas.