Passage d'1 tableau 2D en paramêtre d'1 fonct
Résolu
godzilla393
Messages postés
16
Statut
Membre
-
fiddy Messages postés 441 Date d'inscription Statut Contributeur Dernière intervention -
fiddy Messages postés 441 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.
Configuration: Linux Suse Firefox 2.0.0.6
7 réponses
-
Ah, voilà qui est intéressant. ^^.
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. -
pourquoi pas:
p_direction d= balayage ( p1, PI/2, circ);
avec circ etant le tableau 2D -
ca marche en tapant
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
-
-
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. -
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 -
Quelle est la déclaration de ton tableau circ ?
-
c 'est à dire?
tu veux le détail du code?
circ[NC][MC]=circuit(N,M);
/* création de circuits */ int **circuit ( int n, int m ) { ...