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
Configuration: Linux
Mozilla 1.9.0.16

1 réponse

  • Votes
  • Date
  • Date décroissante
  1. Contributeur
    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,
    1. oui ça marche maintenant je saisis bcp mieux le passage par référence dans les structures avec cet exemple, merci fiddy.
    2. 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.