Je ne comprend pas les pointeurs

Fermé
sandra - 10 juin 2008 à 00:06
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 - 10 juin 2008 à 11:09
Bonsoir,

je ne comprend pas les pointeurs, en disent que les pointeurs nous
réservent beaucoup de memoire mais quand je voit cette exemple je ne comprend pas

###################################

program pointeurexemple;
type mma:array[1..10,1..10] of integer;
var p:^mma;

###################################

Voila je ne comprend pas a quoi sert l'addrese p^ qui est un pointeur ? Pour quoi on utilise pas directement mma est quelle est la diffirence ?
Pouvez vous m'expliquer SVP car j'ai un examen

cordialement

8 réponses

KX Messages postés 16746 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 29 juin 2024 3 016
10 juin 2008 à 00:13
Dans ce cas précis tu ne devrais pas avoir besoin de ^mma...
0
KX Messages postés 16746 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 29 juin 2024 3 016
10 juin 2008 à 00:19
La différence est purement technique...
il y a le nom : mma (qui identifie ta variable) et le pointeur ^mma (qui localise la position mémoire de ta variable)

tu peux modifier le contenu de ta variable sans changer le pointeur à condition d'utiliser la même taille mémoire.
Si tu veux augmenter dynamiquement la taille mémoire d'un objet (impossible sur un array) il te faudra réafecter le pointeur
0
KX Messages postés 16746 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 29 juin 2024 3 016
10 juin 2008 à 00:20
Remarques (de mémoire) :
Il doit y avoir égalité entre p et ^mma (tous deux pointeurs), de même qu'entre p^ et mma (tous deux array)
0
y a pas un bons cours sur les pointeurs (je ne veux pas le cours de développer)
merci
0
KX Messages postés 16746 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 29 juin 2024 3 016
10 juin 2008 à 00:31
Apparemment tu utilises un langage Pascal (comme moi) mais je n'ai véritablement compris les pointeurs qu'avec le tutoriel de C du site du Zéro il ne te sera pas nécessaire de comprendre le C pour comprendre les explications théoriques sur les pointeurs... alors bonne chance !
--
La confiance n'exclut pas le contrôle
0
marwina32 Messages postés 218 Date d'inscription samedi 7 juin 2008 Statut Membre Dernière intervention 7 avril 2010 32 > KX Messages postés 16746 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 29 juin 2024
10 juin 2008 à 00:45
bonsoir;
oui, c'est un très bon site, moi aussi je n'ai ps compris les pointeurs qu'avec m@téo du site du zéro
0
KX Messages postés 16746 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 29 juin 2024 3 016
10 juin 2008 à 00:54
Récemment j'ai lu une question qui concernait un algorithme utilisant des pointeurs : ici
La réponse que j'y est faite est très imagée, mais elle te permettrai peut-être de voir une explication détaillé (sur un exemple) d'un programme nécessitant l'utilisation de pointeurs.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Marco la baraque Messages postés 996 Date d'inscription vendredi 9 mai 2008 Statut Contributeur Dernière intervention 5 novembre 2009 328
10 juin 2008 à 01:11
Bonsoir,
Comme le dit KX, le pointeur est en fait l'adresse de ton objet en mémoire.
C'est à la fois très pratique et très contraignant :

- tu ne manipules plus qu'une adresse, donc un objet très léger (en général la taille d'un entier). Cela est super pratique dans le cas où tu as des structures de données assez lourdes, et que tu en as beaucoup : la mémoire utilisée peut être considérablement réduite en utilisant des pointeurs.
C'est surtout vrai dans le fait que lorsque tu fais appel à une fonction prenant un objet en paramètre (j'entends par objet tout objet des langages orientés objet, toute structure, tout type primitif...), une copie de ton objet est placé dans la pile, et ça peut être très lourd (imagine un programme récursif par exemple). Avec les pointeurs, tu as moins de chances d'avoir un débordement de pile, et c'est plus performant car les objets à copier sont plus légers.

- tu peux écrire ce que tu veux dans la zone mémoire (tu connais la taille de la zone allouée), donc tu peux écrire ce que tu veux dans cette zone mémoire. C'est très puissant (tu as un contrôle énorme), mais très dangereux à la fois si tu ne gères pas bien tes pointeurs (si par exemple tu écris des données trop volumineuses, tu dépasses la zone mémoire allouée, et là soit tu as un segmentation fault, dans le meilleur des cas, soit tu écrases les données adjacentes à ta zone mémoire, ce qui généralement fait tout planter ;).
L'écrasement des données adjacentes peut aussi être intentionnel ! C'est une technique courante utilisée par les hackeurs (le buffer overflow), qui consiste à déclencher un comportement inattendu du programme, en utilisant un pointeur sur une zone mémoire, et en écrasant les données adjacentes avec des valeurs consciencieusement choisies.

En espérant t'avoir un peu éclairé.
0
comment en disent que les pointeur a une grande capasité de memoire est nous nous l'avons déclaré (ex pointeur vers un enregistrement)
0
J'ai fait un tours sur google et voici ce que je viens de comprendre !!! si je me trempe corrigez moi :)

Voici un exemple :

#####################
TYPE pointeur=^type_de_la_variable_pointée

ex : TYPE tpoint=^tval; (* pointe sur des TVAL *)
tval=record
valeur:integer;
suivant:tpoint
end;
VAR p1:tpoint;
#####################

donc chaque fois quand écrit NEW(p1^) il nous alloue une mémoire d'un enregistrement puis on fait DISPOSE(p1^) pour finir et si on veux créer une autre enregistrement on fait NEW(p1^) est c'est pour ça quand dit que nous créant une grande memoire

est ce que je me trempe
si ca est vrais, si on a 10 enregistrement quand a créer 10 fois avec new(p1^) comment peut on aller au 4 enregistrement

merci
0
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
10 juin 2008 à 11:09
oui, c'est ça.
par contre, si tu fait 10 new, tu écrases à chaque fois.
Je ne sais plus très bien comment le pascal gère la mémoire, mais soit les valeurs de 1 à 9 sont effacer, soit elles sont perdu car elle ne sont récupérer nulle part.
Dans le deuxième cas, tu as une fuite de mémoire, c'est à dire que ton programme prend de plus en plus de place.
0