Changer une adresse?

Fermé
seljazou Messages postés 175 Date d'inscription dimanche 6 septembre 2009 Statut Membre Dernière intervention 25 décembre 2009 - 23 nov. 2009 à 14:51
Pacorabanix Messages postés 3248 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 - 23 nov. 2009 à 15:00
Bonjour,

Peut on affecter à un pointeur une valeur? ( à part NULL)...

Et à quoi servent les opérations sur les pointeurs, (+, -, ++, = etc) , serent t elles à modifier les adresses, les déplacer?

Je croyais qu'on ne peut pas changer la valeur d'une adresse....

décidement !!!!!!


merci de répondre.

1 réponse

Pacorabanix Messages postés 3248 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 661
23 nov. 2009 à 15:00
d'un coté oui, tu n'as pas trop à te soucier des adresses mémoire, c'est l'OS qui se charge de les attribuer à ton programme. Ensuite tu les manipules via des nom de variables, des pointeurs, les "malloc" renvoient une adresse mémoire lorsque tu fais de l'allocation dynamique.

Mais il y a quelques astuces : dans un tableau [] par exemple, toutes les valeurs sont mises à la suite dans la mémoire (c'est dit dans la norme C / C++).

Donc tu peux faire, si ton tableau est par exemple de taille 25 et de type int
monTableau est comme (presque!) un pointeur vers le premier élément. C'est un peu comme si tu faisais &monTableau[0].

faire *monTableau retourne un int qui est le premier élément du tableau (monTableau[0]) (si je ne me trompe pas trop :D)

tu pourrais faire *(monTableau + sizeof(int)) pour accéder au deuxième élément (monTableau[1]).
de même *(monTableau + 2*sizeof(int)) pour accéder à monTableau[2]) ....

Ce n'est pas très conseillé car peu clair comme pratique. Tu peux aller voir ceci :https://c.developpez.com/faq/?page=Pointeurs-tableaux-et-chaines-de-caracteres , il y a plusieurs articles qui devraient d'éclairer.

Attention aux erreurs d'exécution "segmentation fault" si tu essayes d'accéder à une partie de la mémoire qui n'est pas allouée au programme !
0