Partage
  • Partager sur Facebook
  • Partager sur Twitter

pointeur

13 novembre 2016 à 4:44:12

Bonjour

Je suis débutant avec les pointeurs.

j'essaye d’exécuter ce petit programme mais je comprends pas en fait le warring est ce que vous pouvez me l'expliquer svp

-
Edité par my name is trinita 13 novembre 2016 à 4:45:48

  • Partager sur Facebook
  • Partager sur Twitter
13 novembre 2016 à 5:22:04

essayes de laisser une ligne vide apres la derniere accolade du programme
  • Partager sur Facebook
  • Partager sur Twitter
13 novembre 2016 à 5:28:18

Arf, la prochaine fois enlève la transparence ou fait un copié/collé de ton code stp :p.

En gros %d est pour les variables de type int, mais la tienne est de type int*.

Pour que ça marche, il te suffit de déréférencé mon pointeur comme ceci:

printf("%d\n", *pointeursurage);



  • Partager sur Facebook
  • Partager sur Twitter
13 novembre 2016 à 5:34:53

Xwilarg a écrit:

Arf, la prochaine fois enlève la transparence ou fait un copié/collé de ton code stp :p.

En gros %d est pour les variables de type int, mais la tienne est de type int*.

Pour que ça marche, il te suffit de déréférencé mon pointeur comme ceci:

printf("%d\n", *pointeursurage);



mais non si elle veut afficher ce que contient le pointeur(donc l'adresse) elle peut normalement..pas d'erreur dans son code tant qu'on ne sait pas ce qu'elle vaut afficher au juste 

je pense qu'il faut juste qu'elle ajoute une ligne vide apres la derniere accolade pour eviter le warning

  • Partager sur Facebook
  • Partager sur Twitter
13 novembre 2016 à 5:38:25

pour afficher des pointeurs via "printf", il faut utiliser %p

printf("%p\n", pointeur);



  • Partager sur Facebook
  • Partager sur Twitter
http://cpp-rendering.io : Vous trouverez tout ce dont vous avez besoin sur Vulkan / OpenGL et le rendu 3D !
13 novembre 2016 à 5:41:19

Qnope a écrit:

pour afficher des pointeurs via "printf", il faut utiliser %p

printf("%p\n", pointeur);



Non, %p c'est pour afficher l'adresse d'une variable, et je ne pense pas que ce soit ce qu'il veule.

ChiiRaz1 a écrit:

Xwilarg a écrit:

Arf, la prochaine fois enlève la transparence ou fait un copié/collé de ton code stp :p.

En gros %d est pour les variables de type int, mais la tienne est de type int*.

Pour que ça marche, il te suffit de déréférencé mon pointeur comme ceci:

printf("%d\n", *pointeursurage);



mais non si elle veut afficher ce que contient le pointeur(donc l'adresse) elle peut normalement..pas d'erreur dans son code tant qu'on ne sait pas ce qu'elle vaut afficher au juste 

je pense qu'il faut juste qu'elle ajoute une ligne vide apres la derniere accolade pour eviter le warning

A titre de contre-exemple:







  • Partager sur Facebook
  • Partager sur Twitter
13 novembre 2016 à 5:47:16

Xwilarg a écrit:

Qnope a écrit:

pour afficher des pointeurs via "printf", il faut utiliser %p

printf("%p\n", pointeur);



Non, %p c'est pour afficher l'adresse d'une variable, et je ne pense pas que ce soit ce qu'il veule.

ChiiRaz1 a écrit:

Xwilarg a écrit:

Arf, la prochaine fois enlève la transparence ou fait un copié/collé de ton code stp :p.

En gros %d est pour les variables de type int, mais la tienne est de type int*.

Pour que ça marche, il te suffit de déréférencé mon pointeur comme ceci:

printf("%d\n", *pointeursurage);



mais non si elle veut afficher ce que contient le pointeur(donc l'adresse) elle peut normalement..pas d'erreur dans son code tant qu'on ne sait pas ce qu'elle vaut afficher au juste 

je pense qu'il faut juste qu'elle ajoute une ligne vide apres la derniere accolade pour eviter le warning

A titre de contre-exemple:



j'ai pas ajouté de ligne et y a pas de blems..ça m'affiche l'adresse

j'ai dit qu'il faut ajouter car dans le premier chapitre du cours de matheo c'est écrit que ne pas le faire peut generer un warning..

voila mon code :

 





  • Partager sur Facebook
  • Partager sur Twitter
13 novembre 2016 à 5:54:33

Je suis désolé mais tu ne peux pas voir un message d'erreur et sortir une raison au hasard.

warning: format '%d' expects argument of type 'int', but argument 2 has type 'int *'

Ce qui donne en français :

attention: le format '%d' attend un argument du type 'int' mais l'argument 2 est du type 'int *'

Voici la 'solution':

Et des expliquations sur le printf: http://www.cplusplus.com/reference/cstdio/printf/

-
Edité par Xwilarg 13 novembre 2016 à 5:55:33

  • Partager sur Facebook
  • Partager sur Twitter
13 novembre 2016 à 5:54:37

Xwilarg a écrit:

Qnope a écrit:

pour afficher des pointeurs via "printf", il faut utiliser %p

printf("%p\n", pointeur);



Non, %p c'est pour afficher l'adresse d'une variable, et je ne pense pas que ce soit ce qu'il veule.

Heu? À ma connaissance, un pointeur contient une adresse. Hors si %p est fait pour afficher l'adresse d'une variable, c'est clairement fait pour afficher l'adresse contenue dans un pointeur.

La documentation te dit clairement que l'argument est un pointeur ;)

The void * pointer argument is printed in hexadecimal (as if by %#x or %#lx).

  • Partager sur Facebook
  • Partager sur Twitter
http://cpp-rendering.io : Vous trouverez tout ce dont vous avez besoin sur Vulkan / OpenGL et le rendu 3D !
13 novembre 2016 à 5:57:42

Ca dépend, l'auteur veut afficher la valeur de age via pointeursurage ou il veut afficher l'adresse en mémoire du pointeur ?
  • Partager sur Facebook
  • Partager sur Twitter
13 novembre 2016 à 6:03:16

Vu comment le problème est décrit, il souhaite afficher l'adresse et non la valeur. surtout que vous lui avez donné la solution pour déférencer le pointeur
  • Partager sur Facebook
  • Partager sur Twitter
http://cpp-rendering.io : Vous trouverez tout ce dont vous avez besoin sur Vulkan / OpenGL et le rendu 3D !
13 novembre 2016 à 6:06:09

Qnope a écrit:

Vu comment le problème est décrit, il souhaite afficher l'adresse et non la valeur. surtout que vous lui avez donné la solution pour déférencer le pointeur


Le faîtes est qu'il n'est toujours pas répondu.

Et si c'est juste pour obtenir l'adresse, il aurait très bien put faire

printf("%p\n", &age);

Pour moi, il souhaite savoir comment avoir la valeur pour pouvoir utiliser les pointeurs, justement.

  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
13 novembre 2016 à 17:46:47

Moi je me pose une question quel est t'on editeur de texte mdr :D ?
  • Partager sur Facebook
  • Partager sur Twitter
14 novembre 2016 à 13:05:22

Madz_frMadz_al a écrit:

Moi je me pose une question quel est t'on editeur de texte mdr :D ?


Si tu parle de l'auteur, je pense qu'il utilie Emacs.
  • Partager sur Facebook
  • Partager sur Twitter
14 novembre 2016 à 16:13:36

Le faîtes est qu'il n'est toujours pas répondu.

Qnope a donné la réponse au tout début de la discussion, donc à mon avis il y a longtemps que Trinita a corrigé et est passé à autre chose.

  • Partager sur Facebook
  • Partager sur Twitter
14 novembre 2016 à 17:46:56

Bonjour,

juste pour préciser un tout petit peu …

Oui, %p est le seul moyen donné par la norme pour «afficher» une expression de type void *. On peut également l'utiliser pour d'autres types de pointeurs puisque void * est un type «générique» de pointeur. Néanmoins la norme ne garantit pas que cela fonctionne avec les pointeurs sur fonctions. La norme ne garantit pas non plus que ce qui est affiché avec un %p représente une adresse.
Néanmoins avec les implémentations courantes sur les plateformes classiques on peut raisonnablement supposer qu'on peut caster une fonction en void * sans trop de problèmes, et que %p affichera en héxadécimal une adresse (virtuelle).

  • Partager sur Facebook
  • Partager sur Twitter
First solve the problem. Then, write the code. ~ John Johnson
16 novembre 2016 à 1:06:58

PicoDev a écrit:

Bonjour,

juste pour préciser un tout petit peu …

Oui, %p est le seul moyen donné par la norme pour «afficher» une expression de type void *. On peut également l'utiliser pour d'autres types de pointeurs puisque void * est un type «générique» de pointeur. Néanmoins la norme ne garantit pas que cela fonctionne avec les pointeurs sur fonctions. La norme ne garantit pas non plus que ce qui est affiché avec un %p représente une adresse.
Néanmoins avec les implémentations courantes sur les plateformes classiques on peut raisonnablement supposer qu'on peut caster une fonction en void * sans trop de problèmes, et que %p affichera en héxadécimal une adresse (virtuelle).


que veut dire caster svp?
  • Partager sur Facebook
  • Partager sur Twitter
16 novembre 2016 à 1:36:22

C'est une conversion de type forcée. google donne par exemple → http://www.ltam.lu/cours-c/prg-c40.htm ou https://fr.wikipedia.org/wiki/Conversion_de_type
  • Partager sur Facebook
  • Partager sur Twitter
First solve the problem. Then, write the code. ~ John Johnson