Différence tableau pointeur !
Fermé
GUIPE
Messages postés
94
Date d'inscription
mardi 5 mai 2009
Statut
Membre
Dernière intervention
15 décembre 2009
-
22 sept. 2009 à 17:53
le père - 23 sept. 2009 à 08:24
le père - 23 sept. 2009 à 08:24
A voir également:
- Différence tableau pointeur !
- Tableau croisé dynamique - Guide
- Tableau ascii - Guide
- Tableau word - Guide
- Trier tableau excel - Guide
- Difference tcp udp - Guide
4 réponses
chuka
Messages postés
965
Date d'inscription
samedi 11 octobre 2008
Statut
Membre
Dernière intervention
29 juillet 2010
378
22 sept. 2009 à 19:05
22 sept. 2009 à 19:05
Salut,
En fait char* t ne contient aucune donnée!!! juste une adresse!!!
Il pointe donc vers une adresse mémoire...qui va te permettre de recuperée les données stockées à cette adresse!!!
char * buffer[] est un tableau d'adresse, donc voir ce qui est au dessus!!
Bon courage!!
@+
En fait char* t ne contient aucune donnée!!! juste une adresse!!!
Il pointe donc vers une adresse mémoire...qui va te permettre de recuperée les données stockées à cette adresse!!!
char * buffer[] est un tableau d'adresse, donc voir ce qui est au dessus!!
Bon courage!!
@+
Bonjour,
De but en blanc, en supposant que ton langage est le C ou le C++, si je fais une déclaration :
Je ne peux RIEN mettre dedans SAUF l'adresse d'une cas mémoire contenant un char, mais PAS le char lui même.
Bien sûr, si la case mémoire est contigüe à d'autres cases qui contiennent elles aussi des char, mon pointeur me permet de lire ou d'écrire dans ces cases en faisant simplement :
adresse du premier char : *monpointeur
adresse du deuxième char : *(monpointeur+1)
adresse du troisième char : *(monpointeur+2) etc...
mais il faut que ces cases soient des cases mémoires valides !
Un exemple en C++ :
On peut rétorquer, mais à quoi sert le pointeur, alors ?
Dans ce cas, on peut dire à rien, mais au lieu de faire monpointeur = untableau, on aurait pu faire :
Autre chose, la déclaration char *buffer[] n'est pas une déclaration valide, sauf en temps qu'argument de fonction.
De plus elle désigne un tableau de pointeur
J'ai le droit de faire :
Mais ceci ne permettra pas de stocker des char : on aura simplement 20 pointeurs sur char auxquel il faut associer des cases mémoires allouées.
Je suis sûr que tu as déjà le vertige non ?
Mais franchement, ce genre de question est trop important pour se contenter de la réponse d'un participant, fut-il compétant(!) au forum. Il faut quasiment un cours ou un tuto entier pour expliquer les pointeurs C/C++ !
Je te conseille d'aller d'abord voir par exemple le lien de cette page ; "meilleures réponses pour tableaux et pointeurs", ou le site du z, ou developpez.com ou un autre site avec des tutoriaux C/C++, et éventuellement un bon bouquin pour compléter, sauf si tu veux juste t'amuser quelques heures avec le langage!
De but en blanc, en supposant que ton langage est le C ou le C++, si je fais une déclaration :
char *monpointeur;
Je ne peux RIEN mettre dedans SAUF l'adresse d'une cas mémoire contenant un char, mais PAS le char lui même.
Bien sûr, si la case mémoire est contigüe à d'autres cases qui contiennent elles aussi des char, mon pointeur me permet de lire ou d'écrire dans ces cases en faisant simplement :
adresse du premier char : *monpointeur
adresse du deuxième char : *(monpointeur+1)
adresse du troisième char : *(monpointeur+2) etc...
mais il faut que ces cases soient des cases mémoires valides !
Un exemple en C++ :
char *monpointeur; char untableau[10]; // là j'ai 10 cases mémoires valides monpointeur = untableau; // mon pointeur, comme untableau pointe vers la première de mes 10 cases contigües je peut mettre des caractères de deux façons : untableau[0] = 'a'; untableau[1] = 'b'; untableau[2] = 'c';untableau[3] = '\0'; ou bien *monpointeur = 'a'; *(monpointeur + 1) = 'b'; *(monpointeur + 2) = 'c', *monpointeur + 3 = '\0';
On peut rétorquer, mais à quoi sert le pointeur, alors ?
Dans ce cas, on peut dire à rien, mais au lieu de faire monpointeur = untableau, on aurait pu faire :
monpointeur = new char[10];et donc se passer de la déclaration statique de untableau : ou plus fort, si sz est une variable int qui contient le nombre de cases, faire une allocation variable comme
monpointeur = new char[sz];
Autre chose, la déclaration char *buffer[] n'est pas une déclaration valide, sauf en temps qu'argument de fonction.
De plus elle désigne un tableau de pointeur
J'ai le droit de faire :
char *tabp[20]
Mais ceci ne permettra pas de stocker des char : on aura simplement 20 pointeurs sur char auxquel il faut associer des cases mémoires allouées.
Je suis sûr que tu as déjà le vertige non ?
Mais franchement, ce genre de question est trop important pour se contenter de la réponse d'un participant, fut-il compétant(!) au forum. Il faut quasiment un cours ou un tuto entier pour expliquer les pointeurs C/C++ !
Je te conseille d'aller d'abord voir par exemple le lien de cette page ; "meilleures réponses pour tableaux et pointeurs", ou le site du z, ou developpez.com ou un autre site avec des tutoriaux C/C++, et éventuellement un bon bouquin pour compléter, sauf si tu veux juste t'amuser quelques heures avec le langage!
GUIPE
Messages postés
94
Date d'inscription
mardi 5 mai 2009
Statut
Membre
Dernière intervention
15 décembre 2009
22 sept. 2009 à 22:54
22 sept. 2009 à 22:54
Donc quand on fait monpointeur= char[10], mon pointeur pointe sur le premier caractère du tableau ? Et quelle est la différence entre un tableau et une chaine de caractère ? Et dans le cas d'une chaine de caractères, le pointeur peut-il pointer sur toute la chaine(tout le texte) ou bien il pointera toujours sur le premier caractere ?Merci beaucoup d'avance.
PS: Si tu as le temps, j'aimerai que tu vois ce post : ==> https://forums.commentcamarche.net/forum/affich-14479046-huffmann-algorithme#1.
Merci,
PS: Si tu as le temps, j'aimerai que tu vois ce post : ==> https://forums.commentcamarche.net/forum/affich-14479046-huffmann-algorithme#1.
Merci,
Bonjour
Quand on fait monpointeur= char[10] on fait une erreur. monpointeur est un pointeur et char[10] est un caractère : un pointeur ne peut pas recevoir la valeur d'un caractère; par contre, il peut (doit) recevoir son adresse : monpointeur= &char[10]
quelle est la différence entre un tableau et une chaine de caractère ? Une chaîne de caractères est une suite d'octets qui s'arrête au premier caractère nul rencontré. Dans ce sens, c'est donc une normalement une partie d'un tableau. Je dis normalement, car si pour une raison quelconque il n'y a pas de zéro dans le tableau, la chaîne peut 'déborder' mais c'est généralement involontaire avec des conséquences désagréables sur le fonctionnement du programme.
Précisons aussi qu'on n'emploie le terme de chaîne que si les octets correspondant sont censés représenter un texte lisible, même si en théorie ça peut être n'importe quoi (sauf 0)
le pointeur peut-il pointer sur toute la chaine(tout le texte) ou bien il pointera toujours sur le premier caractere Tu peux le faire pointer où tu veux. Si tu as un char * qui pointe au début de la phrase "le soleil brille", tu peux lui ajouter 3, il pointera sur "soleil brille" et si tu t'en sers pour recopier ou afficher quelque chose, seule la fin de la phrase sera prise en compte. La totalité de la phrase sera encore en mémoire, mais le début sera devenu inaccessible avec ce pointeur-ci.
Quand on fait monpointeur= char[10] on fait une erreur. monpointeur est un pointeur et char[10] est un caractère : un pointeur ne peut pas recevoir la valeur d'un caractère; par contre, il peut (doit) recevoir son adresse : monpointeur= &char[10]
quelle est la différence entre un tableau et une chaine de caractère ? Une chaîne de caractères est une suite d'octets qui s'arrête au premier caractère nul rencontré. Dans ce sens, c'est donc une normalement une partie d'un tableau. Je dis normalement, car si pour une raison quelconque il n'y a pas de zéro dans le tableau, la chaîne peut 'déborder' mais c'est généralement involontaire avec des conséquences désagréables sur le fonctionnement du programme.
Précisons aussi qu'on n'emploie le terme de chaîne que si les octets correspondant sont censés représenter un texte lisible, même si en théorie ça peut être n'importe quoi (sauf 0)
char tableau [20]; // tableau est un tableau :) strcpy(tableau, "coucou"); // ses 7 premiers caractères (on inclut le 0 final) contiennent une chaîne
le pointeur peut-il pointer sur toute la chaine(tout le texte) ou bien il pointera toujours sur le premier caractere Tu peux le faire pointer où tu veux. Si tu as un char * qui pointe au début de la phrase "le soleil brille", tu peux lui ajouter 3, il pointera sur "soleil brille" et si tu t'en sers pour recopier ou afficher quelque chose, seule la fin de la phrase sera prise en compte. La totalité de la phrase sera encore en mémoire, mais le début sera devenu inaccessible avec ce pointeur-ci.