Les pointeurs.

Fermé
S. - Modifié par BmV le 5/04/2014 à 22:10
sambia39 Messages postés 610 Date d'inscription vendredi 31 juillet 2009 Statut Membre Dernière intervention 9 février 2023 - 6 avril 2014 à 18:06
Bonjour,
Je débute en programmation, et je galère avec ces fuckings pointeurs.
Je me débrouille très bien sinon, dans ce qui est variable, tableau statique et dynamiqu, structure.
Mais je ni comprends rien aux pointeurs. J'ai déjà lu beacoup de chose mais rien ni fait (siteduzero etc..).
Qqln aurait la gentillesse de me faire un récapitulatif ? Je parle de ce qui est syntaxique, comment écrire le pointeur dans tel ou tel situation, mais aussi les pointeurs dans les fonctions.
Ça me serait d'une grande aide merci !

3 réponses

kentour mohamed
5 avril 2014 à 00:23
bonsoir,
les pointeurs ne sont rien d'autre que des adresses (chiffres binaires) mémoires d'un ou des types de var,
ils sont ordonnés consécutivement dans la RAM, donc on peut
les manipuler comme des indices .
venant aux fonctions , en générale, l'astuce c'est quand vous initialisez ou déclarer vos pointeurs au début et lorsque vous arrivez à faire l'appel de la fonction vous n'avez qu'a précédé votre pointeur par l'adresse mémoire( &) ,,,,,,,,,,,,en C .
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
5 avril 2014 à 18:24
vous n'avez qu'a précédé votre pointeur par l'adresse mémoire( &)
Non. Si on met l'esperluette devant le pointeur, on envoie l'adresse mémoire du pointeur (dans la pile). Il suffit de mettre le pointeur tel quel. En effet ce dernier contient déjà l'adresse mémoire d'une zone dans le heap...
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
5 avril 2014 à 00:26
Il y a trop de choses à récapituler dans les pointeurs.
Peux-tu nous dire plutôt ce qui te pose problème ? Genre avec un exemple.

Sinon, on peut te donner d'autres tutos. Nos explications (sauf sur un point précis, cf. ci-dessus) ne seront pas mieux qu'un bon tuto consacré à ce sujet :-).
0
jerome9359 Messages postés 693 Date d'inscription mercredi 4 février 2009 Statut Membre Dernière intervention 10 juin 2019 159
5 avril 2014 à 19:16
Un pointeur est une varible exemple :

int a=3;

on crée une variable a qui a la valeur 3 . Cette variable est dans la mémoire et prend 4 octet de mémoire et est situé par exemple à l'adresse 0x200. Dans la mémoire, cette variable aura une adresse pour que le pc puisse la retrouver

int *p=4;

On crée une variable qui est un pointeur. Cette variable particulière est conçue pour contenir des adresses on dit alors que c'est un pointeur. L'adresse que contient la variable p est 4. On dit que p pointe a l'adresse 4.
On ne sait pas ce qu'il y a l'adresse 4. Il est donc dangereux d'écrire ça.
remarquons que p comme a est une variable et qu'il possède sa propre adresse par exemple 0x740

Pour obtenir l'adresse d'une variable on utilise &.

Pour obtenir l'adresse de a, on écrit &a.
Pour obtenir l'adresse de la variable p on écrit &p.

Tel qu'est déclaré p, p ne peut contenir que des adresses de variables de type int.

Pour faire contenir l'adresse de a dans p (le pointeur/variable)
On écrit :
p = &a

Maintenant p pointe vers a.

il faut absolument que p le pointeur et la variable vers laquelle le pointeur point soient du même type. Ici int.

Pour accéder à valeur de la variable vers laquelle p point, ici a:
On écrit
*p

Donc écrire

a=5;

ou

*p=5;

reviens au même.

0
sambia39 Messages postés 610 Date d'inscription vendredi 31 juillet 2009 Statut Membre Dernière intervention 9 février 2023 49
5 avril 2014 à 22:09
Bonsoir
moi je dirais pas ça comme exemple car tu parles pas de variable en tant que telle mais d'une variable typer , pour mieux comprendre ce que c'est une variable mais aussi un pointeur contrairement à ce que tu as résumé .

Je dirais qu'une variable est le nom d'un emplacement mémoire qui peut stocker une valeur d'un type donné parce que chaque emplacement de la mémoire possède une adresse précise et unique exemple 0x0000 à 0xFFFF par exemple et on ne peut pas tous les mémoriser ou les connaitre par coeur c'est pour quoi ont défini des variables associées à un emplacement précis de la mémoire et d'ailleurs le mot variable sous-entend que la valeur placée à cet endroit par le programme est susceptible de varier à tout moment.. Dans ton exemple c'est une variable de type particulier (integer) qui va indiquer à l'ordinateur la place nécessaire pour le stockage de la variable ainsi que le type de l'opération qu'elle est susceptible de subir.

pour les pointeurs il faut juste les comprendres comme étant des adresses car une variable n'est pas un pointeur parce que je le rappelle qu'une variable est un nom d'emplacement mémoire qui peut stocker une valeur d'un type donné et un pointeur est tout simplement une valeur ou variable contenant une adresse donc un pointeur est une adresse vers un emplacement mémoire plus vulgairement dit une adresse pointant vers une valeur d'un type donné situer à un emplacement mémoire (référence aux arithmétiques des pointeurs pour comprendre enfin pas si simple).

@jerome9359 :
int *p=4; 

On crée une variable qui est un pointeur


Non, mais plutôt une variable pointeur nommé "p" qui va assigner à cette variable pointeur communément appelé "pointeur" l'adresse souhaitée on dit alors quelle pointe vers une adresse ou une variable .

@jerome9359:
Pour faire contenir l'adresse de a dans p (le pointeur/variable)
On écrit :

 p = &a 


C'est plutôt une assignation en utilisant l'opérateur commercial "&" en d'autres termes elle renvoie ou assigne l'adresse mémoire d'une variable et dans ton exemple elle assigne à la variable pointeur "p" de type integer l'adresse de la variable "a"; ont peut dire alors que la variable pointeur dit pointeur pointe vers l'emplacement mémoire (donc valeur de la variable).

@jerome9359
Pour accéder à valeur de la variable vers laquelle p point, ici a:
On écrit
*p

Donc écrire

 
a = 5; 
//ou 
*p = 5; 

reviens au même.


*p
Est ce que l'on appelle un déréférencement de pointeur et c'est la façon par le qu'elle en va accéder à la valeur contenue à l'emplacement mémoire spécifique attribuer ici l'emplacement de la valeur "a" qui vaut 5.
et
a = 5 ;
//ou
*p = 5;


faux ce n'est pas du tout la même chose dans ton contexte, si tu ne précise pas que le variable pointeur pointe déjà vers l'emplacement mémoire de "a"
 a = 5; 
en assigne la valeur 5 la variable nommée "a"
 *p = 5; 
en assigne la valeur 5 à l'emplacement mémoire vers lequel "p" pointe hors précision de ta part cela définit un emplacement mémoire autre que la variable "a".

bref juste un ensemble de précision, mais si ce que j'ai dit comporte des erreurs faite moi part de ça je vous dis à bientôt
0
jerome9359 Messages postés 693 Date d'inscription mercredi 4 février 2009 Statut Membre Dernière intervention 10 juin 2019 159
5 avril 2014 à 22:43
Tes précisions ont complété mes explications
0
sambia39 Messages postés 610 Date d'inscription vendredi 31 juillet 2009 Statut Membre Dernière intervention 9 février 2023 49
6 avril 2014 à 18:06
Bonjour,
pas tout à fait mais si tu le dit :)
à bientôt
0