IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Transmettre un tableau à un sous programme


Sujet :

C

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 23
    Points : 19
    Points
    19
    Par défaut Transmettre un tableau à un sous programme
    Bonjour !
    Voilà mon problème :
    dans mon main, j'ai déclaré un tableau à deux dimensions comprenant les coordonnées de certains points, ce dernier est déclaré de la manière suivante:

    int coord[2][NB_DE_POINT];

    le problème est que je n'arrive pas à transmettre mon tableau à mon sous programme (sous programme qui a pour fonction de vérifier si les coordonnées de ces points coincident avec celle d'un bonhomme qui bouge sur l'écran).

    J'envoie coord à mon sous programme et je reçois un int** puis je vérifie avec une boucle for: for(i=0;i<NB_DE_POINT;i++)

    et je fais un test sur coord[1][i] et coord[2][i] pour vérifier si les coordonnées d'un point coincident avec celles de la position de mon bonhomme.

    J'obtiens cette erreur là:

    C:\Users\SteF\Desktop\ECE\z Pikmin\last\multi souri\main.c|160|error: cannot convert `int (*)[100]' to `int**' for argument `2' to `void animation_pikmin(t_olimar*, int**, t_pikmin*)'|

    J'ai tout essayé: j'ai essayé d'envoyer coord[2][NB_DE_POINT], j'ai essayé d'envoyer &coord et de recevoir un int*** (là le compilo me dit que je ne peut pas faire de test if entre un pointeur et un scalaire) ....

    Quelle est la syntaxe exacte?
    merci d'avance !

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Août 2007
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Août 2007
    Messages : 190
    Points : 219
    Points
    219
    Par défaut
    Salut,

    Tu as cette erreur car coord n'est pas un int** mais un pointeur sur un tableau de 100 int (i.e un int(*)[100] comme indiqué par le compilateur). Pour régler ce problème il te suffit de modifier le prototype de ta fonction animation_pikmin comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void animation_pikmin(t_olimar*, int[][NB_DE_POINT], t_pikmin*)

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 23
    Points : 19
    Points
    19
    Par défaut
    Merci pour l'aide !
    mais je t'avouerais que je comprend pas (le programme semble bien compiler, après je ne suis pas sur qu'il arrive à acceder aux informations de coord).
    Imaginons que je veuille modifier les infos de coord, c'est un pointeur qu'il faut que j'envoie non ?

    Or le tableau étant à deux dimensions, ne devrais-je pas plutôt avoir un double pointeur?

    Et ensuite, pourquoi envoyé coord[][NB...] et non pas coord[2][] ? ou coord[][] ? merci d'avance

  4. #4
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Citation Envoyé par Darktrouble Voir le message
    Merci pour l'aide !
    mais je t'avouerais que je comprend pas (le programme semble bien compiler, après je ne suis pas sur qu'il arrive à acceder aux informations de coord).
    Imaginons que je veuille modifier les infos de coord, c'est un pointeur qu'il faut que j'envoie non ?
    Quand tu transmets un tableau, tu récupères un pointeur (qui contient l'adresse du premier élément du tableau)

    Or le tableau étant à deux dimensions, ne devrais-je pas plutôt avoir un double pointeur?
    Il n'y a aucun rapport entre le nombre de dimensions du tableau et le nombre d' * sur les éléments du tableau. Seule compte la nature des éléments du tableau
    Et ensuite, pourquoi envoyé coord[][NB...] et non pas coord[2][] ? ou coord[][] ?
    La première forme est nécessaire dans la déclaration des paramètres parce que le compilateur doit connaitre la taille des éléments du tableau (mais pas leur nombre qui est le terme dans le premier[]) pour calculer la position des éléments du tableau. Tu peux aussi écrire coord[2][NB...] , mais le 2 ne sert rigoureusement à rien et est parfaitement ignoré.
    Le type de l'objet local coord est alors int (*)[NB_DE_POINT] : pointeur sur un tableau de NB_DE_POINT int.
    Ce qui est important c'est que le compilateur connaisse toutes les dimensions sauf la première qui ne lui sert à rien.

    Par contre, alors il suffit d'appeler la fonction avec simplement coord comme argument (si c'est également le nom du tableau dans le code appelant) comme argument.
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 23
    Points : 19
    Points
    19
    Par défaut
    okay merci beaucoup !

Discussions similaires

  1. Transmettre un tableau @tab à un programme C
    Par Ickou dans le forum Langage
    Réponses: 7
    Dernier message: 13/02/2006, 13h16
  2. Envoi d'informations dans un sous programme
    Par Tanguy Sarela dans le forum Linux
    Réponses: 3
    Dernier message: 22/12/2005, 16h57
  3. Réponses: 31
    Dernier message: 30/08/2005, 13h10
  4. Réponses: 2
    Dernier message: 04/06/2004, 10h36
  5. [langage] les sous programmes
    Par giverny dans le forum Langage
    Réponses: 6
    Dernier message: 21/07/2003, 19h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo