C Valeur, adresse, parametre

Résolu
Chewi-Chew -  
Nabla's Messages postés 18201 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

J'ai un petit probleme en C.

Je suis entrain de developper une petite application, malheureusement je ne pourrai pas en dire plus.
Je dois changer les valeur d'une variable local avec l'appel d'une fonction qui en appel d'autre. Je pense que je dois passer ma variable en parametre et affecter les valeurs au niveau des adresse de chaque donnée, mais je me souviens plus de comment on fait !

DATA est le nom d'une grosse structure qui comporte plusieur structure
Data est une variable de type DATA
blabla est une sous structure de DATA
blabla1 est une variable de blabla

int main (void)
{
DATA Data;
Create (Data)
}

//Fonction create
Create (Data)
{
fonction1(Data);
fonction2(Data);
...
}

//Fonction1
fonction1 (Data)
{
data.blabla.blabla1 = 00;
}

Désolé si c'est pas tres clair
Merci d'avance a ceux comprendront et qui pourrons m'aider

PS meme pas la peine de me proposer du C++, car je ne dois pas l'utilisé Uniquement du C.
PS2 Je ne dois pas non plus mettre Data en Variable Globale, ca dois rester local.
Configuration: Windows XP
Firefox 3.5.3

5 réponses

  1. Nabla's Messages postés 18201 Date d'inscription   Statut Contributeur Dernière intervention   3 228
     
    ce n'est pas la structure que tu dois passer à ta fonction, mais un pointeur sur la structure. Un pointeur, c'est uen adresse.
    pour obtenir le pointeur d'une variable (ou structure), il faut mettre & devant le paramètre...
    au lieu de passer un type DATA, tu fera donc passer du DATA*.
    au lieu d'y accèder en faisant DATA . variable, tu feras DATA ->variable

    cherches les cours sur les pointeurs sur le net
    1
  2. Chewi-Chew
     
    Merci pour cette reponse rapide
    Donc ca donnerai :

    int main (void)
    {
    DATA Data;
    Create (&Data)
    }

    //Fonction create
    Create (DATA *Data)
    {
    fonction1(&Data);
    fonction2(&Data);
    ...
    }

    //Fonction1
    fonction1 (DATA * Data)
    {
    data->blabla->blabla1 = 00;
    }
    0
    1. Nabla's Messages postés 18201 Date d'inscription   Statut Contributeur Dernière intervention   3 228
       
      //Fonction create
      Create (DATA *Data)
      {
      fonction1(&Data);
      fonction2(&Data);
      ...
      }
      => non, ca donne ce qui suit, car tu aura déja un pointeur, donc pas la peine de remettre le &
      //Fonction create
      Create (DATA *Data)
      {
      fonction1(Data);
      fonction2(Data);
      ...
      }

      data->blabla->blabla1 = 00;
      => je sais pas, mais ca m'étonnerai. à mon avis, ce serait plutot
      data->blabla.blabla1 = 00;
      0
  3. Chewi-Chew
     
    Alors j'ai suivi ce que tu m'as dit et voila ce que ça me renvoie :

    error C2664: 'Fonction1' : cannot convert parameter 1 from 'DATA*' to 'DATA'
    No constructor could take the source type, or constructor overload resolution was ambiguous
    0
  4. Chewi-Chew
     
    Probleme resolu

    Merci Nabla's !!!
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Nabla's Messages postés 18201 Date d'inscription   Statut Contributeur Dernière intervention   3 228
     
    y a pas de quoi.

    Les pointeurs font la puissance du C. Tu devrais bien te renseigner sur leur utilisation et leurs avantages. Pour de grosses structures, il vaut souvent mieux instancier les varaibles grâce aux pointeur, sur le tas, que sur la pile (la taille de la pile étant souvent assez petite)
    0