Passer un tableau de structure en argument d'une fonction en
Résolu/Fermémamiemando Messages postés 33535 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 12 février 2025 - 12 déc. 2022 à 21:04
Bonjour chers membres.
Je veux savoir comment passer un tableau de structure en argument d'une fonction.
- Passer un tableau de structure en argument d'une fonction en
- Tableau croisé dynamique - Guide
- Fonction si et - Guide
- Tableau ascii - Guide
- Tableau word - Guide
- Trier un tableau excel - Guide
8 réponses
type ma_fonction(struct ma_structure tableau[]) { ...
Ça serait également utile d'y passer la longueur ...
10 déc. 2022 à 19:22
J'écris mon programme dans le langage C++
12 déc. 2022 à 21:04
Bonjour,
Que tu sois en C ou en C++, tu peux allouer un "tableau" avec malloc de sorte à ce que le bloc alloué contienne n * sizeof(Informations) si tu veux stocker n exemplaires de ta structure. Dans ce cas, il faut passer l'adresse du bloc ainsi alloué ainsi que la valeur n à ta fonction pour qu'elle sache quand s'arrêter. C'est la méthode que propose Pierrot le fou dans son message #2.
#include <stdio.h> #include <stdlib.h> typedef struct information_t { int id; } information_t; void print_informations(information_t * informations, size_t n) { size_t i; for (i = 0; i < n; i++) { printf("%ld\n", informations[i].id); } } int main() { size_t i, n = 5; information_t * informations = malloc(sizeof(information_t) * n); for (i = 0; i < n; i++) { informations[i].id = 10 * i; } print_informations(informations, n); free(informations); return 0; }
Ensuite, si tu veux quelque chose de plus C++, on utiliserait par exemple la classe std::vector :
#include <iostream> #include <vector> struct information_t { int id; information_t(int id0): id(id0) {} }; void print_informations(const std::vector<information_t> & informations) { for (auto & information : informations) { std::cout << information.id << std::endl; } } int main() { std::size_t i, n = 5; std::vector<information_t> informations; for (i = 0; i < n; i++) { information_t information(10 * i); informations.push_back(information); } print_informations(informations); return 0; }
Résultat :
0
10
20
30
40
Bonne chance
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question10 déc. 2022 à 08:03
bonjour,
quel langage utilises-tu?
Modifié le 12 déc. 2022 à 20:49
Bonsoir.
J'utilise le langage C++.
J'ai déclaré la procédure Enregistrement sans lui passer mon tableau de structure en paramètre comme suit :
//déclaration de la structure : struct Informations { char Nom[30]; char Prénom[30]; int Age; }; Informations Personne [taille_max]; //Déclaration de la procédure : void Enregistrement() { // code............. }
Mais quand j'exécute le programme après l'avoir appelé dans la fonction principale, ça tourne à l'infini lorsque je remplis l'un des champs de ma structure avec une chaîne de caractères contenant un espace.
Aidez moi à trouver solution à cette boucle infini qui se crée automatiquement !
D'abord, on ne voit pas ton code. Où définis-tu le tableau de structures? Dans le main ou la fonction.
Si c'est dans le main, tu ne le passes pas en paramètre. Ce que tu génères dans la fonction est perdu au retour.
Si c'est dans la fonction, comment comptes-tu le retourner au main?
Est-ce un tableau à la C, un vecteur, un array?
Modifié le 12 déc. 2022 à 20:50
Je travaille dans code blocks.
La méthode Enregistrement, la structure Informations et le tableau de structure sont tous définis dans un fichier source que j'ai créé.
L'exercice impose que la fonction main n'appele que des procédures.