ProgOS_S07E04

ProgOS_S07E04

par Etienne Paul Léon Bruno,
Number of replies: 1

Bonjour,

Dans le corrigé de la série 7 de cette semaine, je ne comprends pas pourquoi le scanf de la méthode  void \ push(void* data) (voir photo en pièce jointe) enregistre la valeur dans regs et non pas dans  regs[0] étant que c'est cette valeur que l'on souhaite modifier. En faisant   regs[0] , le programme compile et fonctionne mais s'arrête automatiquement après le scanf... 

Pour moi, donné tel quel, regs désigne une adresse mémoire (puisque c'est un pointeur) donc avoir avoir lu la correction, j'en déduis que en faisant juste  regs on arrive au premier emplacement mémoire de l'objet data (ici un tableau de  double ). Mais comment aurions-nous fait si la fonction push ajoutait un élément au second emplacement mémoire de data et non pas au début ? Je suppose à nouveau que  regs[1] est incorrect mais je ne comprends pas pourquoi alors ?

Merci par avance,

Etienne BRUNO

 

In reply to Etienne Paul Léon Bruno

Re: ProgOS_S07E04

par Deleted user,

Bonjour,

Comme vous dites, regs désigne un emplacement mémoire, et plus précisément l'emplacement mémoire du premier registre. Il y a grosso modo deux manières de désigner cet emplacement: regs et &regs[0].

Etant donné que scanf attend une adresse pour savoir où stocker l'information lue, on passe regs plutôt que regs[0]. Si au contraire, on aurait voulu stocker ça dans le deuxième registre, on aurait écrit &regs[1] (ou regs + 1 qui sera expliqué lors de l'introduction de l'arithmétique des pointeurs après Pâques).