[C TOTW 2] Parcours de tableau
|
01-09-2014, 10h42
(Modification du message : 15-09-2014, 13h44 par ark.)
Message : #1
|
|
ark
Psyckomodo! Messages : 1,033 Sujets : 48 Points: 317 Inscription : Sep 2011 |
[C TOTW 2] Parcours de tableau
Hello all,
nouveau tip of the week, aujourd'hui, je vous propose un petit truc pratique avec les pointeurs. imaginons un tableau de données, comme suit : Code C :
si on veut parcourir tous les éléments de ce tableau, on va pouvoir utiliser la très classique méthode a coup de sizeof : Code C :
Mais si on réfléchit un peu, arr est un tableau, on connait donc son adresse. Ce qu'il faut savoir avec les tableaux, c'est que leur taille est celle totale des tailles des éléments. c'est pourquoi on peut faire le truc avec le sizeof. Mais du coup, &arr + 1, pointe vers la fin du tableau ! Ce qui veut dire que (&arr + 1) - &arr == sizeof(arr) !! Et c'est assez pratique parce que pour le coup, on va pouvoir utiliser directement un pointeur du bon type pour parcourir notre tableau aisément ! Code C :
A noter aussi que *(&arr + 1) peut s'ecrire aussi: (&arg)[1] mais aussi encore 1[&arg] Ce qui au final peut donner : Code C :
|
|
22-09-2014, 13h54
(Modification du message : 22-09-2014, 14h00 par crown.)
Message : #2
|
|
crown
Membre actif Messages : 52 Sujets : 5 Points: 18 Inscription : Oct 2011 |
RE: [C TOTW 2] Parcours de tableau
Juste pour être sûr d'avoir bien compris (je garde la même structure que ton tableau), on prend le cas où &arr = 0x0028FECC, (&arr + 1) = 0x0028FF0C car en mémoire 64 octets sont réservés, la mémoire étant donc déjà utilisée dans cette espace, on chope l'adresse la 1ere adresse mémoire de libre après celle occupé par le tableau ?
Du coup la condition de ta boucle for peut s'écrire de la façon suivante : Code C :
|
|
22-09-2014, 13h57
Message : #3
|
|
ark
Psyckomodo! Messages : 1,033 Sujets : 48 Points: 317 Inscription : Sep 2011 |
RE: [C TOTW 2] Parcours de tableau
Oui, c'est bien ça =)
|
|
29-09-2014, 12h46
(Modification du message : 29-09-2014, 13h04 par crown.)
Message : #4
|
|
crown
Membre actif Messages : 52 Sujets : 5 Points: 18 Inscription : Oct 2011 |
RE: [C TOTW 2] Parcours de tableau
Du coup j'ai une autre question, en faisant &arr[1] on chope l'adresse du deuxième élément du tableau, mais en quoi est-ce différent de (&arr)[1] ?
[EDIT] : Du coup j'ai trouvé, pour ceux que ça intéresserait : http://arjunsreedharan.org/post/69303442...-find-size [EDIT#2] : Bon apparemment les pointeurs et moi c'est pas trop ça : Code C :
Ici ça ne me liste pas mon tableau et je vois pas pourquoi, si vous avez une idée è_é ? [EDIT#3] : Finalement j'ai testé 2/3 trucs et le code ci dessous marche en revanche je sais pas pourquoi :/ Code C :
|
|
29-09-2014, 12h47
(Modification du message : 29-09-2014, 13h09 par EpicOut.)
Message : #5
|
|
Banni Messages : 121 Sujets : 10 Points: 22 Inscription : Feb 2012 |
RE: [C TOTW 2] Parcours de tableau
il vient d'où ton "(&arr)[1]" ? ce serait plutôt (&tab)[1]
Ca donnerait plus un truc comme ça: Code C :
#include <stdio.h> |
|
29-09-2014, 17h44
(Modification du message : 29-09-2014, 17h44 par crown.)
Message : #6
|
|
crown
Membre actif Messages : 52 Sujets : 5 Points: 18 Inscription : Oct 2011 |
RE: [C TOTW 2] Parcours de tableau
Autant pour moi le (&arr)[1] c'est une erreur d’inattention dans le code que je compile je mets bien &tab mais ça me donne le même résultat (càd rien).
Du coup oui (&tab[5]) marche mieux en effet, bon en l'occurence c'est (&tab[6]) pour afficher toutes les valeurs. Par contre (&tab[6]) == (tab + 6) (ici je vois bien pourquoi c'est deux expressions ce valent) mais pour (&tab + 12) je vois pas en quoi cette expression est interprétée comme les deux précédentes. [EDIT] : Je pense avoir un début d'explication pour (&tab + 12) qui correspond à (&tab[6]), dîtes moi si je me trompe : on prend &tab = 0028FEE0 et (&tab + 12) = 0028FF10, on a donc 0x0028FF10 - 0x0028FEE0 = 0x30 soit 48 en décimal, en sachant que sizeof(*ptr) = 4, on a 48 / 4 = 12, ici on retrouve le 12 mais à partir de là je vois toujours pas pourquoi ça correspond. Ce qui est assez déroutant c'est que tab devrait être égal à &tab en ce qui concerne l'adresse, helas non dans la fonction, tab = 0028FEF8 et &tab = 0028FEE0 soit 24(d) de moins (ce qui correspondrait au tableau de 6 int ?, un int étant de 4 octets). Si vous avez des suggestions pour expliquer ça ? ; je suis preneur. |
|
« Sujet précédent | Sujet suivant »
|
Sujets apparemment similaires… | |||||
Sujet | Auteur | Réponses | Affichages | Dernier message | |
[C TOTW 6] Xor tricks | ark | 7 | 230 |
06-03-2016, 23h36 Dernier message: Commodor |
|
[C] Initialiser un tableau | notfound | 2 | 77 |
28-08-2015, 11h01 Dernier message: eax64 |
|
[C TOTW 5] bitfields ! | ark | 4 | 130 |
23-09-2014, 11h17 Dernier message: Aniem |
|
[C TOTW 4] Equivalent de try / catch / throw en C | ark | 0 | 93 |
15-09-2014, 10h00 Dernier message: ark |
|
[C TOTW 3] #warning, #error | ark | 1 | 119 |
10-09-2014, 11h49 Dernier message: ark |
|
[C TOTW 1] Trick avec #include | ark | 10 | 246 |
01-09-2014, 18h23 Dernier message: Commodor |
|
[C] Parcours récursif des dossiers | InstinctHack | 12 | 190 |
22-04-2013, 11h20 Dernier message: sakiir |
|
[C] question tableau | InFamouZz | 8 | 193 |
20-03-2013, 19h19 Dernier message: sakiir |
|
[C++] Parcours de dossier récursif | Dobry | 2 | 67 |
04-03-2012, 11h13 Dernier message: Dobry |
Utilisateur(s) parcourant ce sujet : 1 visiteur(s)