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 :

Tableau passé en paramètre


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 176
    Par défaut Tableau passé en paramètre
    Bonjour je veux faire une simple addition en binaire par le biais d'une sous-fonction à laquelle je passe un tableau en paramètre.

    Pour modifier un entier et non une copie il faut travailler avec les pointeurs et passer l'adresse de la variable à la sous-fonction mais avec un tableau je suis perdu j'ai tout essayé ( sauf la bonne solution lol ) et je ne vois vraiment pas comment faire

    Sans pointeurs ca ne modifie rien et avec des pointeurs j'ai des erreur de segmentation lorsque je veux mettre une valeur dans une case par exemple:

    *tableau[1]=0 => segmentation fault lol

    Voici le code sans pointeur si vous pouviez me le corriger merci bien


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
    #include <stdio.h>
     
    void addition(int tableau[],int l)
    {
    int i=0;
     
      while(i<l)
      {
        if (tableau[i] == 0)
        {
        (tableau[i])++;
        return;
        }
        else
        {
        (tableau[i])--;
        }
      }
     
     
    }
     
     
    int main()
    {
     
    int binaire[5]={0,0,0,0,0};
    int l=4;
    int i;
    for(i=0;i<30;i++)
    {
    addition(binaire,l);
     
    printf("%d%d%d%d%d\n",binaire[0],binaire[1],binaire[2],binaire[3],binaire[4]);
     
    }
    return 0;
    }

  2. #2
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Un tableau est automatiquement converti en pointeur lorsqu'on le passe à une fonction. Pour plus de détails sur le passage d'un tableau à une fonction: http://emmanuel-delahaye.developpez.....htm#param_tab

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 176
    Par défaut
    mouarf merci je savais y'avait une histoire comme ça je vais aller faire un tour

    Rappel : En langage C, les passages de paramètres se font exclusivement par valeur.
    je savais pô ça lol

    merci

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 176
    Par défaut
    je suis vraiment con lol en fait c'est l'algo d'addition qui était faux j'oubliais d'incrémenter i dans le " else "

    enfin merci j'ai appris un truc sur les passages de tableau

  5. #5
    Expert confirmé
    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
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    void addition(int tableau[],int l)
    {
    int i=0;
     
      while(i<l)
      {
        if (tableau[i] == 0)
        {
        (tableau[i])++;
        return;
        }
        else
        {
        (tableau[i])--;
        }
      } 
    }
    La manipulation du tableau est correcte dans ce code. le problème est dans le code car jamais i n'est modifié et il reste à 0.
    La première fois que la fonction est appelée, elle met tableau[0] à 1
    La seconde fois, tableau[0] vaut 1 et on traite le else qui le met à 0, on boucle sur le while, on trouve tableau[0] à 0, on le met à 1 et on sort!

    il manque simplement qq part un i++ dans le while

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Le tableau passé en paramètre, subit des modifications. Pourquoi ?
    Par enibris dans le forum Collection et Stream
    Réponses: 1
    Dernier message: 12/05/2014, 20h39
  2. Récupérer les infos d'un tableau passé en paramètre
    Par PrincessGirl dans le forum Débuter
    Réponses: 8
    Dernier message: 12/03/2011, 13h42
  3. Réponses: 7
    Dernier message: 16/01/2009, 21h41
  4. problème avec un tableau passé en paramètre
    Par curley dans le forum Débuter
    Réponses: 1
    Dernier message: 28/10/2007, 02h54
  5. Réponses: 32
    Dernier message: 24/07/2006, 19h19

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