Fonction correcte en C-structure mais

bernard -  
fiddy Messages postés 11653 Statut Contributeur -
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
A voir également:

1 réponse

fiddy Messages postés 11653 Statut Contributeur 1 847
 
Salut,
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,
0
bernard
 
oui ça marche maintenant je saisis bcp mieux le passage par référence dans les structures avec cet exemple, merci fiddy.
0
fiddy Messages postés 11653 Statut Contributeur 1 847 > bernard
 
Il 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.
0