Fonction correcte en C-structure mais

bernard -  
fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   -
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

  1. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   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
    1. bernard
       
      oui ça marche maintenant je saisis bcp mieux le passage par référence dans les structures avec cet exemple, merci fiddy.
      0
      1. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   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