C Valeur, adresse, parametre [Résolu/Fermé]

Signaler
-
Messages postés
18143
Date d'inscription
mercredi 4 juin 2008
Statut
Contributeur
Dernière intervention
28 avril 2014
-
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.

5 réponses

Messages postés
18143
Date d'inscription
mercredi 4 juin 2008
Statut
Contributeur
Dernière intervention
28 avril 2014
3 126
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

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci

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;
}
Messages postés
18143
Date d'inscription
mercredi 4 juin 2008
Statut
Contributeur
Dernière intervention
28 avril 2014
3 126
//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;
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
Probleme resolu

Merci Nabla's !!!
Messages postés
18143
Date d'inscription
mercredi 4 juin 2008
Statut
Contributeur
Dernière intervention
28 avril 2014
3 126
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)