[LCP2] Petite question

Voir le sujet précédent Voir le sujet suivant Aller en bas

resolu [LCP2] Petite question

Message  Guigui le Lun 21 Oct 2013, 20:41

#include <stdio.h>

void s(long long * g, long long * d)
{  
  long long * t = g;
  *g = *d;
  *d = *t;
}

int main(void)
{    
   long long a = -8, b = -6;
   s(&a, &b);
   printf("%lld %lld", a, b);
}

Ce code se trouve dans l'interro 1 de l'année 2012-2013 et lorsque je le test sur qt creator j'arrive à un affichage -6 -6 alors que je me m'attendais à avoir -6 -8. Qui sait me dire pourquoi ? Merci d'avance

Guigui

Nombre de messages : 2
Prénom : Guillaume
Date d'inscription : 07/04/2013

Revenir en haut Aller en bas

resolu Re: [LCP2] Petite question

Message  Asta le Lun 21 Oct 2013, 21:55

Je dirais que lorsqu’on fait pointer t sur g, puis g sur d, t prend aussi l’adresse de d.

Code:
#include <stdio.h>

void s(long long * a, long long * b)
{  

    printf("1 *a = %lld *b = %lld \n", *a,*b);
    long long * t = a;
    printf("2 *a = %lld *b = %lld *t = %lld \n", *a,*b,*t);
    *a = *b;
    printf("3 *a = %lld *b = %lld *t = %lld \n", *a,*b,*t);
    *b = *t;
    printf("4 *a = %lld *b = %lld *t = %lld \n", *a,*b,*t);
    //printf("a = %lld b = %lld t = %lld ", a,b,t);
}

int main(void)
{    
    long long a = -7, b = -8;
    s(&a, &b);
    printf("%lld %lld", b, a);
}
renvoie

Code:
1 *a = -7 *b = -8
2 *a = -7 *b = -8 *t = -7
3 *a = -8 *b = -8 *t = -8
4 *a = -8 *b = -8 *t = -8
t change de valeur après qu’on assigne l’adresse de a à b (*a = *b;)

Asta

Nombre de messages : 21
Prénom : Gatien
Statut : 3e Gestion
Date d'inscription : 22/09/2013

Revenir en haut Aller en bas

resolu Re: [LCP2] Petite question

Message  Guigui le Jeu 24 Oct 2013, 11:02

Effectivement ça doit être ça ! Merci beaucoup !

Guigui

Nombre de messages : 2
Prénom : Guillaume
Date d'inscription : 07/04/2013

Revenir en haut Aller en bas

resolu Re: [LCP2] Petite question

Message  nvs le Jeu 24 Oct 2013, 19:01

Asta a écrit:Je dirais que lorsqu’on fait pointer t sur g, puis g sur d, t prend aussi l’adresse de d.
cette explication n'est pas correcte.

voici la bonne :
Code:
g = &a : g pointe sur a
d = &b : d pointe sur b
t = g : t prend la valeur de g, donc t pointe sur a
*g = *d : ce vers quoi pointe g prend la valeur de ce vers quoi pointe d, donc a prend la valeur de b (ici a <- -6)
*d = *t : cd vers quoi pointe d prend la valeur de ce vers quoi pointe t, donc b prend la valeur de a (ici b <- -6)

cyclops 

_________________

nvs

Nombre de messages : 5238
Age : 44
Prénom : Nicolas
Statut : prof
Localisation : bxl
Date d'inscription : 24/11/2005

http://nvansteenkiste.googlepages.com

Revenir en haut Aller en bas

resolu Re: [LCP2] Petite question

Message  Contenu sponsorisé Aujourd'hui à 10:47


Contenu sponsorisé


Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut


 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum