Passage d'1 tableau 2D en paramêtre d'1 fonct
Résolu
godzilla393
Messages postés
16
Date d'inscription
Statut
Membre
Dernière intervention
-
fiddy Messages postés 11069 Date d'inscription Statut Contributeur Dernière intervention -
fiddy Messages postés 11069 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
J'ai défini la fonction suivante :
avec
j'utilise ma fonction comme suit :
mais ce warning s'affiche:
warning: passing argument 3 of ‘balayage’ from incompatible pointer
Pourquoi? Comment y remédier?
Merci d'avance pour la réponse.
J'ai défini la fonction suivante :
p_direction balayage (points position ,double cap ,int circ[NC][MC]) { ....}
avec
struct s_point {int abscisse;int ordonnee;}; typedef struct s_point* points; struct s_direction { double s_teta; double s_dist_obst;}; typedef struct s_direction * p_direction;
j'utilise ma fonction comme suit :
p_direction d= balayage ( p1, PI/2., circ[NC][MC]);
mais ce warning s'affiche:
warning: passing argument 3 of ‘balayage’ from incompatible pointer
Pourquoi? Comment y remédier?
Merci d'avance pour la réponse.
A voir également:
- Passage d'1 tableau 2D en paramêtre d'1 fonct
- Tableau word - Guide
- Tableau ascii - Guide
- Trier un tableau excel - Guide
- Remettre parametre usine pc - Guide
- Parametre dns - Guide
7 réponses
Ah, voilà qui est intéressant. ^^.
circ[NC][MC]=circuit(N,M);
Ce n'est pas bon.
Pour les explications :
Si tu veux réaliser avec int **circuit. Cela n'est pas un tableau (en C, une fonction ne peut pas renvoyer de tableaux). Cela renvoie un pointeur sur la première case d'une zone mémoire allouée dans le heap.
circ[NC][MC]=circuit(N,M);
Ce n'est pas bon.
Pour les explications :
//création d'un tableau. int circ[NC][MC]; //pour le remplir : void circuit(int circ[][MC],int n, int m) { circ[i][j]=... //etc } //l'appel de la fonction circuit(circ,n,m);
Si tu veux réaliser avec int **circuit. Cela n'est pas un tableau (en C, une fonction ne peut pas renvoyer de tableaux). Cela renvoie un pointeur sur la première case d'une zone mémoire allouée dans le heap.
int **circ=circuit(n,m); int **circuit(int n, int m) { //allocation d'une zone avec malloc ou calloc ... return zone; } //Dans ce cas le prototype est effectivement : p_direction balayage ( points position,double cap , int** circ); //attention à ne pas oublier le free pour libérer la zone dans le heap.
ca marche en tapant
et
merci
p_direction balayage ( points position,double cap , int** circ) {
et
balayage ( p1, 0., circ);
merci
Ca marche en tapant
Ca ne devrait pas marcher. Tu dois obtenir un warning. De plus, cela va te conduire à d'étranges problèmes au sein de la fonction puisque le compilateur ne saura pas la taille de la deuxième dimension.
Le bon prototype est :
p_direction balayage ( points position,double cap , int circ[][MC])
Et l'appel est : balayage ( p1, 0., circ);
Cdlt
Ca ne devrait pas marcher. Tu dois obtenir un warning. De plus, cela va te conduire à d'étranges problèmes au sein de la fonction puisque le compilateur ne saura pas la taille de la deuxième dimension.
Le bon prototype est :
p_direction balayage ( points position,double cap , int circ[][MC])
Et l'appel est : balayage ( p1, 0., circ);
Cdlt
bonjour, j'ai changé en int circ[][MC]
MC étant une macro donnant la 2eme dimension du tableau, n'est ce pas pour cela que int ** circ ne me déclenchait pas de warning?
Je ne comprends pas pourquoi ca fonctionne avec l''écriture int ** circ, que je trouvais d'ailleurs douteuse.
Merci pour votre éclairage à ce sujet.
MC étant une macro donnant la 2eme dimension du tableau, n'est ce pas pour cela que int ** circ ne me déclenchait pas de warning?
Je ne comprends pas pourquoi ca fonctionne avec l''écriture int ** circ, que je trouvais d'ailleurs douteuse.
Merci pour votre éclairage à ce sujet.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
finalement en écrivant
int circ[][MC] dans la fonction puis : balayage ( p1, 0., circ);
j'obtiens tjs un warning !!
warning: passing argument 3 of ‘balayage’ from incompatible pointer type
int circ[][MC] dans la fonction puis : balayage ( p1, 0., circ);
j'obtiens tjs un warning !!
warning: passing argument 3 of ‘balayage’ from incompatible pointer type