Passage par adresse d'un tableau de structures.

Résolu
alekine
Messages postés
13
Date d'inscription
mercredi 18 août 2004
Statut
Membre
Dernière intervention
19 août 2004
- 18 août 2004 à 13:37
alekine
Messages postés
13
Date d'inscription
mercredi 18 août 2004
Statut
Membre
Dernière intervention
19 août 2004
- 18 août 2004 à 15:20
Bonjour,
j'ai un problème pour passer par adresse un tableau de structures. Voilà mon code:

#include <stdio.h>

#define L_MAX 2

struct point //la structure d'un point
{
int num;
int x;
int y;
}
;

int main()
{
struct point liste[L_MAX]; //liste de points
void affichage (struct point );
void saisie_point(struct point );
saisie_point(liste);
affichage(liste);
getchar();
getchar();
return 0;
}

void saisie_point(struct point l) {
int i;
for(i=0;i<L_MAX;i++)
{
printf("Coordonnees du point (X%d,Y%d)\n",i+1,i+1);
printf("X%d : ",i+1);
scanf("%d",l[i]).x);
printf("Y%d : ",i+1);
scanf("%d",((l[i])).y);
}
}

void affichage (struct point l) {
printf("Liste des points entres\n");
int i;
for(i=0;i<L_MAX;i++)
{
printf("A%d(%d,%d)\n",i+1,((l[i])).x,((l[i])).y);
}
}

16 réponses

alekine
Messages postés
13
Date d'inscription
mercredi 18 août 2004
Statut
Membre
Dernière intervention
19 août 2004

18 août 2004 à 15:20
Ok merci... j'ai trouvé qd tu a posté la réponse.

Merci bon après-midi ;)
3
alekine
Messages postés
13
Date d'inscription
mercredi 18 août 2004
Statut
Membre
Dernière intervention
19 août 2004

18 août 2004 à 13:38
Si vous avez une idéée merci beaucoup ;)
0
cs_djl
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
7
18 août 2004 à 14:05
void affichage (struct point *l, size_t size); par exemple

et mets les prototypes en dehors du main ( avant )
0
xboxut
Messages postés
172
Date d'inscription
jeudi 4 mars 2004
Statut
Membre
Dernière intervention
27 novembre 2009

18 août 2004 à 14:08
en fait tu veux prendre comem erguemtn un tableauo de struture rien de plus simple.
je te montre c tre facil
void fontion(point tablo[]){tablo[0].x=10;}
0

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

Posez votre question
cs_djl
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
7
18 août 2004 à 14:13
oui, ca revient au meme

oublie pas struct point dans son cas (pas de typedef) et surtout passe la taille en parametre
0
xboxut
Messages postés
172
Date d'inscription
jeudi 4 mars 2004
Statut
Membre
Dernière intervention
27 novembre 2009

18 août 2004 à 14:14
je remet un exemple pour te monter.desoler pour les faute de frappe je manque de sommeil :p
void top(int j[])//c le truc de base mais comem djl l a dit tu ferai mieux 
//de mettre la taille de ton tablo en argument pour pas ecrire n importe ou
{
j[0]=1;
}

int main()
{
int array[3];
top(array);
return 0;
}

0
alekine
Messages postés
13
Date d'inscription
mercredi 18 août 2004
Statut
Membre
Dernière intervention
19 août 2004

18 août 2004 à 14:14
Merci.
Pourquoi rajoutes-tu un "size_t size" ?

void affichage (struct point * l) { etc ... convient pas ?

comment manipuler une valeur :
*l[i].x .... (*l)[i].x ou ?

Merci
0
cs_djl
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
7
18 août 2004 à 14:14
et specifie const si tu ne compte pas la modifier
0
cs_djl
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
7
18 août 2004 à 14:15
size c'est pour la taille, necessaire si tu compte parcourir le tableau ou faire des controles de bord
0
alekine
Messages postés
13
Date d'inscription
mercredi 18 août 2004
Statut
Membre
Dernière intervention
19 août 2004

18 août 2004 à 14:27
Merci mais désolé j'ai toujours pas compris...
Je veux passer les paramètres par adresse et non par valeur...
a l'intérieur de la fonction comment manupule t'on les valeurs de la structures ?

*l[i].x ou (*l)[i].x
ou ?
0
cs_djl
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
7
18 août 2004 à 14:32
void affichage (struct point *l, size_t size)
{
printf("Liste des points entres\n");
size_t i;

for(i=0;i<size;i++)
{
printf("A%d(%d,%d)\n",i+1,l[i].x,l[i].y);
}
}
0
alekine
Messages postés
13
Date d'inscription
mercredi 18 août 2004
Statut
Membre
Dernière intervention
19 août 2004

18 août 2004 à 14:39
Ok merci...
Euh ... dernière question, pour appeler la fonction ?
affichage(&liste,taille) ou affichage(liste,taille)

Ds ts les cas, j'ai lerreur suivante :
error C2664: 'affichage' : cannot convert parameter 1 from 'point (*__w64 )[2]' to 'point'
0
cs_djl
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
7
18 août 2004 à 14:46
ben si declaré comme ca
struct point liste[L_MAX];

appel
affichage(liste,L_MAX);
0
alekine
Messages postés
13
Date d'inscription
mercredi 18 août 2004
Statut
Membre
Dernière intervention
19 août 2004

18 août 2004 à 14:55
Merci bien... Ca compile, build mais y a une erreur qui se produit a l'éxécution : Access violation writing location 0xaefdfb0e.

Je te met le code :

#include <stdio.h> 

#define L_MAX 2

struct point //la structure d'un point
{
int num;
int x;
int y;
} 
;

void affichage (struct point *);
void saisie_point(struct point *);

int main()
{
struct point liste[L_MAX]; //liste de points
saisie_point(liste);
affichage(liste);
getchar();
getchar();
return 0;
}

void saisie_point(struct point *l) {
int i;
for(i=0;i<L_MAX;i++)
{
printf("Coordonnees du point (X%d,Y%d)\n",i+1,i+1);
printf("X%d : ",i+1);
scanf("%d",l[i].x);
printf("Y%d : ",i+1);
scanf("%d",l[i].y);
}
}

void affichage (struct point *l) {
printf("Liste des points entres\n");
int i;
for(i=0;i<L_MAX;i++)
{
printf("A%d(%d,%d)\n",i+1,l[i].x,l[i].y);
}
}


Merci
0
cs_djl
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
7
18 août 2004 à 15:17
void saisie_point(struct point *l) {
int i;
for(i=0;i<L_MAX;i++)
{
printf("Coordonnees du point (X%d,Y%d)\n",i+1,i+1);
printf("X%d : ",i+1);
scanf("%d",&l[i].x);
printf("Y%d : ",i+1);
scanf("%d",&l[i].y);
}
}

ca sera mieux comme ca
0
alekine
Messages postés
13
Date d'inscription
mercredi 18 août 2004
Statut
Membre
Dernière intervention
19 août 2004

18 août 2004 à 15:19
Il faut fournir une adresse et non une valeur pour le 2ième paramètre de scanf. Donc

scanf("%d",&l[i].x);


au lieu de

scanf("%d",l[i].x);
0