CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

petite question en C (pointeurs)

tomtex
tomtex
Niveau 8
29 novembre 2008 à 17:52:34

salut,

voilà j'ai donc une petite question à propos des pointeurs :)
donc en cours on a vu ça :

int *p1 ;
int *pc ;
float *pf ;
char **pc ;
int i ;
char c ;
float f ;
char *s ;

CORRECT :
p1=&i ;
pc=&c ;
ppc=&s ;
pc=&i ;
pc=s ;
ppc=&pc ;
i=*pi ;

  • pc=s[0] ;

ERREUR :
pi=&f ;
pc=&s ;

  • pc=s ;

donc si quelqu'un pouvait m'expliquer pourquoi c'est correct et pourquoi c'est faux...

merci d'avance

dnob700
dnob700
Niveau 10
29 novembre 2008 à 18:54:42

Pour ce qui est correcte, c'est facile : tu stocke dans les pointeurs l'adresse de variable du type pointé par le pointeur (sauf pour pc=&i, j'y reviens). Ou au contraire, tu stocke dans une variable, ce qui est pointé par un pointeur pointant vers un objet du même type que la variable que tu es en train d'écrire (où un type compatible).

Et ce n'est pas vrai pour les exemple faux.

Ce qui est important, c'est la compatibilité binaire. Quand tu stocke le poiteur vers un int (&i) dans un pointeur vers un char (pc) ce n'est pas un problème, car un pointeur vers un int est aussi un pointeur vers un char si on ne regarde ue les 8 premiers bits de l'int (qui sont ceux de poids faible en plus si les architectures standard).

Et après ça, si tu fait c=*pc; ou i=*pc; ça va marcher mais dans les deux cas, tu obtiendra la valeur qu'il y avait dans i modulo 256. De même, et ça explique ce que je viens de dire, tu peut écrire c=*pi; car *pi est un int et tu peut l'écrire dans un char, il va juste être tronqué. Quand tu fait *pc, même si dedans il y a &i, c'est un char qui est lu dans la mémoire et donc stocké dans i ou c dans mes exemple précédant (d'où la troncature, mais aussi l'autorisation de faire ça).

Ça ne marche pas avec pi=&f, car les représentations binaires de ces deux types ne sont pas compatibles. Idem pour le reste (mais dans les autres c'est parce que le niveau d'indirection n'est pas le même à gauche et à droite).

À noter que tout ça est vrai en C, ou un poiteur vers un int peut être converti en un pointeur vers autre chose sans que le compilateur ne sennerve trop. Mais par contre il ne permet pas de transformer un pointeur vers un type non pointeur en un pointeur vers un pointeur ou vice versa et de même entre n'importe quel niveau d'indirection différents.

En C++ tout ça est faux, il faut des conversions explicite pour le compilo entre différents type de pointeur.

P.S. je n'ai rien testé en écrivant cela, il est donc tout à fait possible qu'il y a est plein d'erreurs qui trainent.

tomtex
tomtex
Niveau 8
29 novembre 2008 à 19:32:17

merci beaucoup pour ton aide :ok:

Sous forums
  • Aide à l'achat Mac
  • Macintosh
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Steam Deck
  • Hardware
La vidéo du moment