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 :

Explication d'un résultat


Sujet :

C

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 28
    Par défaut Explication d'un résultat
    Voila j'ai eu un devoir et la question a été "expliqué le résultat" et j'aurai aimé connaitre la raison du résultat pour chacun des chiffres dans le programmes:

    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
    #include "stdio.h"
    #include "stdlib.h"
     
    struct toto{ int t; int T1[3] ; int *T2;};
     
    void modif(int t, int T[3], struct toto S){
     
        t=1;
        T[0]=1;
        S.t=1;
        S.T1[0]=1;
        S.T2[0]=1;
    }
     
    int main(){
        int t;
        int T[3];
        struct toto S;
     
        S.T2=malloc(3*sizeof(int)); if(!S.T2) exit(1);
     
        t=0;
        T[0]=0;
        S.t=0;
        S.T1[0]=0;
        S.T2[0]=0;
     
        modif(t,T,S);
     
        printf("%d %d %d %d %d\n",t,T[0],S.t,S.T1[0],S.T2[0]);
        return 0;
    }
    On obtient à l'affichage : 01001
    edit : trompé sur le résultat pardon

    Quelqu'un peut t-il m'expliquer chaque résultat svp

  2. #2
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    Ce qui est dommage, c'est que le résultat de l'exécution est : 0 1 0 0 1

    Ce qu'il faut bien voir pour expliquer le résultat, c'est que tout le monde vaut 0 avant l'appel à modif(). Certaines des modifications seront visibles après passage de la fonction, on aura des 1 ; les autres non et on continuera à avoir des 0.

    Le premier 0 est logique : la variable t est passée par copie, la modification est donc interne à la fonction et est sans effet sur la variable du main().

    Le premier 1 vient du fait qu'on modifie la zone dont l'adresse est donnée par &T[0] => T. La variable du main() accède à la même zone donc voit la modification.

    Le second et le troisième zéro viennent aussi d'un passage par copie. La structure S est copiée et la fonction modif() travaille sur cette copie. Effet non visible dans le main().

    Le second 1 est un peu plus subtil. On travaille bien sur une copie de la structure mais cette copie contient la même adresse que la structure du main(). On peut donc accéder à une zone "commune". Modification visible dans le main().

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 28
    Par défaut
    Merci de m'avoir aidé , j'ai compris

  4. #4
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    C'est l'important !

    De rien et bonne soirée.

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

Discussions similaires

  1. Résultat et explication d'une instruction
    Par mr.bigka dans le forum Débuter
    Réponses: 2
    Dernier message: 01/12/2013, 18h26
  2. Réponses: 4
    Dernier message: 28/09/2002, 00h00
  3. Recherche code d'un fifo,ou explication
    Par don-diego dans le forum C
    Réponses: 8
    Dernier message: 25/07/2002, 10h26
  4. [BDD] Enregistrer le résultat d'une requête
    Par Mowgly dans le forum C++Builder
    Réponses: 5
    Dernier message: 19/06/2002, 15h26
  5. recherches des cours ou des explications sur les algorithmes
    Par Marcus2211 dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 19/05/2002, 22h18

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