Fonction correcte en C-structure mais
Bonjour, j'ai écrit un petit programme qui m'initialise très bien les cases du tableau d'une variable à 0, le voici:
#include <stdio.h>
#include <stdbool.h>
#define MAX 10
struct garage {
int vehicule[MAX];
_Bool presence[MAX];
};
void initGarage(struct garage g){
int i;
for(i=0;i<MAX;i++){
g.presence[i] = 0;
}
}
int main(){
int i;
struct garage g;
initGarage(g);
for(i=0;i<MAX;i++){
printf("%d ", g.presence[i]);
}
return 0;
}
Mais le problème c'est que le main m'affiche des valeurs aléatoires au lieu des 0, serais ce par hasard une histoire de pointeurs manquant dans le main svp?
merci
#include <stdio.h>
#include <stdbool.h>
#define MAX 10
struct garage {
int vehicule[MAX];
_Bool presence[MAX];
};
void initGarage(struct garage g){
int i;
for(i=0;i<MAX;i++){
g.presence[i] = 0;
}
}
int main(){
int i;
struct garage g;
initGarage(g);
for(i=0;i<MAX;i++){
printf("%d ", g.presence[i]);
}
return 0;
}
Mais le problème c'est que le main m'affiche des valeurs aléatoires au lieu des 0, serais ce par hasard une histoire de pointeurs manquant dans le main svp?
merci
Configuration: Linux Mozilla 1.9.0.16
1 réponse
-
ContributeurSalut,
En fait, c'est que tu ne modifies pas la structure de ton main mais une copie.
Pour initialiser, il te faudra passer l'adresse.
Voici une version corrigée :#include <stdio.h> #include <stdbool.h> #define MAX 10 struct garage { int vehicule[MAX]; _Bool presence[MAX]; }; void initGarage(struct garage *g){ int i; for(i=0;i<MAX;i++){ (*g).presence[i] = 0; } } int main(){ int i; struct garage g; initGarage(&g); for(i=0;i<MAX;i++){ printf("%d ", g.presence[i]); } return 0; }
Cdlt,-
-
Contributeur@bernardIl ne s'agit pas d'un passage par référence mais par adresse. Il s'agit de deux choses différentes.
En C, le passage par référence n'existe pas.
-