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

[C] J'ai une question

MrPasRobotDuTou
MrPasRobotDuTou
Niveau 3
23 octobre 2017 à 22:53:13

Salut :hap:

Je suis encore pas bien doué avec les notions de tableaux et pointeurs, et j'arrive pas a comprendre quelle est la différence entre ces deux codes.

https://pastebin.com/xvKBnkzY
et
https://pastebin.com/i66fQWKS

Niveau gestion de mémoire etc, quel est la différence...?
Pourquoi avoir invente les tableaux si les pointeurs font la même chose ? :(

Merci d'avance !

Message édité le 23 octobre 2017 à 22:53:26 par MrPasRobotDuTou
whiteapplex
whiteapplex
Niveau 21
23 octobre 2017 à 23:26:19

"Pourquoi avoir invente les tableaux si les pointeurs font la même chose ?" :d) Pour des questions de facilité d'écriture j'imagine
Mais en C, un tableau est un pointeur...donc ils ont pas inventé les tableaux à la place des pointeurs, ils ont juste mis des écritures plus simples.
En gros le tableau tab est un pointeur vers le premier élément de ce tableau. Je crois que tu peux le voir en demandant à ton ordi l'adresse de la case mémoire de "tab" et de "tab[0]"
Bref, faut juste retenir: tableau = pointeur

Voilà et si tu veux voir davantage des détails qui contrediront précisément chaque point de ce que je viens de dire, tu as ceci :ok:
https://openclassrooms.com/courses/la-verite-sur-les-tableaux-et-pointeurs-en-c

Message édité le 23 octobre 2017 à 23:26:33 par whiteapplex
Azmurael
Azmurael
Niveau 10
23 octobre 2017 à 23:57:01

On touche là une question subtile du C, et ma réponse méritera probablement d'être étoffée, mais allons y :

Les tableaux sont en C l'unique manière de garantir qu'une collection de variables sera stocké dans un espace contigu en mémoire.
Il faut rappeler que l'opérateur d'indexation de tableau en C ("[]") est un sucre syntaxique qui masque un déréférencement de pointeur ainsi que de l’arithmétique sur pointeur.

Pour illustrer, les lignes 1 et 2 suivantes sont identiques :

int int_array[10];
int *p = array;

int_array[7] = 1; // #1
*(p+7) = 1;       // #2

Ces lignes équivalentes sont un sucre syntaxique sur ce que le compilateur fait réellement, c'est à dire :

*((int *)(((char *) p) + (7 * sizeof(int)))) = 1; // #3

Ceci s'obscurcit encore car le nom d'un tableau peut être converti en l'adresse du pointeur du premier élément. L'expression suivante renvoie donc vrai :

int_array == &(int_array[0])

De là, on peut aboutir au fait qu'un pointeur peut être traitée comme étant la première case d'un tableau. Et c'est pour ça que l'on entretient la confusion que pointeur == tableau.

Yenshu
Yenshu
Niveau 8
24 octobre 2017 à 00:04:23

Le 23 octobre 2017 à 23:57:01 Azmurael a écrit :
On touche là une question subtile du C, et ma réponse méritera probablement d'être étoffée, mais allons y :

Les tableaux sont en C l'unique manière de garantir qu'une collection de variables sera stocké dans un espace contigu en mémoire.
Il faut rappeler que l'opérateur d'indexation de tableau en C ("[]") est un sucre syntaxique qui masque un déréférencement de pointeur ainsi que de l’arithmétique sur pointeur.

Pour illustrer, les lignes 1 et 2 suivantes sont identiques :

int int_array[10];
int *p = array;

int_array[7] = 1; // #1
*(p+7) = 1;       // #2

Ces lignes équivalentes sont un sucre syntaxique sur ce que le compilateur fait réellement, c'est à dire :

*((int *)(((char *) p) + (7 * sizeof(int)))) = 1; // #3

Ceci s'obscurcit encore car le nom d'un tableau peut être converti en l'adresse du pointeur du premier élément. L'expression suivante renvoie donc vrai :

int_array == &(int_array[0])

De là, on peut aboutir au fait qu'un pointeur peut être traitée comme étant la première case d'un tableau. Et c'est pour ça que l'on entretient la confusion que pointeur == tableau.

+1 Bien éxpliqué.

Pseudo supprimé
Pseudo supprimé 24 octobre 2017 à 00:25:26

Sinon au cas où, y a une erreur dans le 2e pastebin, c’est tab++; et non pas *tab++; pour avancer dans le tableau :ok:

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