C Valeur, adresse, parametre

Résolu/Fermé
Chewi-Chew - 16 oct. 2009 à 14:39
Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 - 16 oct. 2009 à 15:19
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.
A voir également:

5 réponses

Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 3 192
16 oct. 2009 à 14:50
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
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
Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 3 192
16 oct. 2009 à 14:56
//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
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
Probleme resolu

Merci Nabla's !!!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 3 192
16 oct. 2009 à 15:19
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