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 :

passage d'un tableau d'une fonction


Sujet :

C

  1. #1
    Membre à l'essai
    Profil pro
    fxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    Inscrit en
    Septembre 2010
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations professionnelles :
    Activité : fxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

    Informations forums :
    Inscription : Septembre 2010
    Messages : 21
    Points : 22
    Points
    22
    Par défaut passage d'un tableau d'une fonction
    bonsoir à tous le monde je suis nouveau en c
    j'ai lu le cours sur les pointeurs
    j'aimerais faire un exemple d'une fonction qui me permet de manipuler un tableau en pointeur et de le retourner
    je n'arrive pas
    comment je fait
    merci

  2. #2
    Membre éclairé
    Inscrit en
    Décembre 2010
    Messages
    290
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 290
    Points : 719
    Points
    719
    Par défaut
    Citation Envoyé par light86 Voir le message
    bonsoir à tous le monde
    Bonsoir light86,

    Citation Envoyé par light86 Voir le message
    je suis nouveau en c
    j'ai lu le cours sur les pointeurs
    Bravo light86.... On est tous passés par là.

    Citation Envoyé par light86 Voir le message
    j'aimerais faire un exemple d'une fonction qui me permet de manipuler un tableau en pointeur et de le retourner
    je n'arrive pas
    comment je fait
    merci
    Est-ce que tu peux préciser sur quoi tu bloques ?
    Par exemple, as-tu un bout de code qui ne fonctionne pas où que tu n'arrives pas à finir ?
    Ou bien y a t-il quelque chose en particulier sur lequel tu aimerais des précisions ?

  3. #3
    Membre à l'essai
    Profil pro
    fxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    Inscrit en
    Septembre 2010
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations professionnelles :
    Activité : fxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

    Informations forums :
    Inscription : Septembre 2010
    Messages : 21
    Points : 22
    Points
    22
    Par défaut demande d'information
    bonjour voila j'ai un tableau ,j'aimerais le modifier dans une fonction et le retourner après
    je n'arrive pas à démarrer
    merci

  4. #4
    Membre éclairé
    Inscrit en
    Décembre 2010
    Messages
    290
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 290
    Points : 719
    Points
    719
    Par défaut
    Peux-tu expliquer la nature des modifications que ta fonction doit apporter au tableau qu'elle reçoit en paramètre ?
    Par exemple : doit-elle en changer la taille ou bien juste le contenu ?
    Est-ce que ta fonction connait implicitement la taille du tableau qui lui est passé, ou bien est-ce que cette taille peut varier d'un appel à l'autre ?
    C'est un tableau de quoi au fait : des floats ? des ints ? des chars ? des structures ? autre chose ?
    Une fois que tu sais ça, tu peux écrire un prototype de la fonction (au sens C du terme, c'est à dire la déclaration de la fonction).

  5. #5
    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
    bonjour voila j'ai un tableau ,j'aimerais le modifier dans une fonction et le retourner après
    - Une fonction ne peut pas retourner un tableau. Par contre, elle peut retourner l'adresse du début d'un tableau (à condition que le tableau ne soit pas en allocation automatique, donc défini localement à la fonction)

    - On ne peut pas avoir un tableau en paramètre d'une fonction : Si on met un tableau en argument d'une fonction, on passe en fait l'adresse du premier élément de ce tableau et le paramètre correspondant dans la fonction est un pointeur.
    Toute modification du tableau effectuée via cette adresse modifie donc le tableau d'origine :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    void fonc(int * t)  
    {  
       t[1] = 2* t[0];
    }
     
    int tab[5]= {1,0,0,0,0};
    fonc(tab);
    // tab == {1,2,0,0,0}
    La déclaration void fonc(int t[]) est interprétée par le compilateur comme void fonc(int * t) . C'est le seul contexte (paramètre d'une fonction) où une notation tableau est en fait équivalente à une notation pointeur.

  6. #6
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 721
    Points : 31 044
    Points
    31 044
    Billets dans le blog
    1
    Par défaut
    Salut light86
    Comme tu le vois, on est tous contents que tu t'intéresses au C.

    Diogène t'a montré un exemple de fonction modifiant un tableau, je vais te détailler son fonctionnement.

    Le main() démarre. Il instancie un tableau de 5 éléments appelé "tab". A ce moment là, tu as 5 cases mémoires contigües (très important) de réservées pour tab. Ces 5 cases ont une adresse qui se suivent donc si la première est en 0x10, les autres sont en 0x11, 0x12, 0x13 et 0x14.

    Ensuite, il passe tab à la fonction fonc(). Ce qu'il faut savoir ici, c'est que la variable "tab" correspond à l'adresse de la première case donc &tab[0] donc ici 0x10. Donc fonc() reçoit 0x10.

    Cette valeur 0x10 étant une adresse, il faut impérativement la ranger dans un pointeur. Comme à cette adresse il y a un entier, alors c'est un pointeur sur int donc un "int étoile" (important le mot "étoile") et la variable stockant cette adresse se nommera "t"

    Maintenant que la fonction possède l'adresse 0x10 (il s'agit de la même que celle du main() bien évidemment puisqu'il n'y a qu'une zone mémoire pour tout le programme) stockée dans t, elle peut aller à cet endroit t[0] et modifier la valeur ce qui sera alors répercuté dans tab[0] puisque dans le main() ce nom identifie la même case. Ou bien aller à la case d'à coté t[1] ou bien t[2] etc jusqu'à t[4].
    Tu peux même aller taper dans t[5] ou t[6] ou t[18] si t'en as envie car il n'y a pas de garde fou mais dans ce cas le comportement sera imprévisible donc à toi de toujours connaitre tes propres contraintes et les respecter...

Discussions similaires

  1. Problème passage tableau dans une fonction
    Par RaphaeL18 dans le forum Langage
    Réponses: 4
    Dernier message: 23/03/2015, 17h41
  2. Probleme passage d'un tableau a une fonction
    Par sin92 dans le forum Débuter
    Réponses: 6
    Dernier message: 02/12/2011, 02h11
  3. Passer le résultat (tableau) d'une fonction
    Par coyote90 dans le forum Access
    Réponses: 3
    Dernier message: 10/11/2005, 19h56
  4. Retourner un tableau depuis une fonction
    Par obalais dans le forum C++
    Réponses: 2
    Dernier message: 20/10/2005, 16h49
  5. [VB6]Passage d'un tableau dans une DLL écrite en delphi
    Par flash dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 20/09/2002, 10h15

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