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
Bonjour,

Ca peut paraitre etre une question débile mais étant débutant j'aimerai en savoir si en définissant un char * buffer, si on peut contenir 1 seul caractère dans le buffer ou si on peut contenir autant de cases mémoires que l'on veut ou si il faut obligatoirement faire un char * buffer[].Merci

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
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!!
@+
0
Bonjour,

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!
0
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
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,
0
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)

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.
0