pointeur et chaines de charactères - C - Programmation
Marsh Posté le 08-05-2008 à 01:24:06
Parce qu'un tableau est un pointeur "constant". Tu ne peux pas modifier sa valeur. Pour la même raison, &pp n'a aucun sens. Son adresse est "pp".
En simplifiant à mort, voit pp comme un nombre (une adresse) qui sera fixée à la compilation. Du coup tu vois tout de suite que 1234++ ou &1234 n'a aucun sens.
Marsh Posté le 08-05-2008 à 01:40:00
tpierron a écrit : Parce qu'un tableau est un pointeur "constant". Tu ne peux pas modifier sa valeur. Pour la même raison, &pp n'a aucun sens. Son adresse est "pp". |
salut,
merci, alors ca équivaut à :
Code :
|
?
mais pourquoi c'est un pointeur constant ?
Marsh Posté le 08-05-2008 à 03:12:32
in_your_phion a écrit : bonjour,
|
pp++, c'est une expression qui voudrait changer la valeur de pp. Or pp est un tableau, et est donc un element fixe (ben oui, quoi, le tableau, une fois alloué, il change pas de place). Par contre, pp + 1, ca ne modifie pas la valeur de pp; ca represente l'adresse du 2e element du tableau (l'adresse du premier étant pp), d'apres la signification de l'addition d'un entier a un tableau.
Ton tableau contient des pointeurs sur des chaines de caracteres. Donc, *(pp+1) est un pointeur sur la deuxieme chaine, ce qui permet d'écrire: char * t = *(pp + 1); comme assignation de la valeur d'un pointeur dans un autre.
A+,
Marsh Posté le 08-05-2008 à 12:15:50
tpierron a écrit : Parce qu'un tableau est un pointeur "constant". Tu ne peux pas modifier sa valeur. Pour la même raison, &pp n'a aucun sens. Son adresse est "pp". |
Désolé de te corriger mais &pp est parfaitement valide c'est tout simplement l'adresse de ce tableau.
Ce qui faut savoir c'est que pp est égale à &pp afin de garder la "notation" pointeur.
Donc quand on écrit pp++, on fait en fait (&pp)++ or l'adresse d'une variable est constante.
Marsh Posté le 08-05-2008 à 18:14:15
salut,
merci pour vos réponses je comprends maintenant.
par contre il y toujours un truc qui n'est pas clair, c'est la différence entre tab et &tab.
par exemple :
Code :
|
|
Marsh Posté le 08-05-2008 à 21:06:23
<< c'est la différence entre tab et &tab. >>
si tab est un tableau (donc de type machin[]) tab et &tab sont synonyme : l'adresse d'un tableau et le tableau lui-même. Pareil pour les fonctions.
int tab[3];
-> tab == &tab
int f(char);
int (*pf1)(char) = f;
int (*pf2)(char) = &f;
-> pf1 == pf2
Marsh Posté le 08-05-2008 à 21:19:49
jesus_christ a écrit : si tab est un tableau (donc de type machin[]) tab et &tab sont synonyme : l'adresse d'un tableau et le tableau lui-même. |
Attention il y a une différence de types. Exemples :
Code :
|
in_your_phion> Les chaînes littérales fournissent des adresses qui ne peuvent être accédées qu'en lecture, du coup il vaut mieux utiliser const :
Code :
|
D'ailleurs ton compilateur devrait te prévenir si il est bien réglé.
Marsh Posté le 08-05-2008 à 21:51:48
exact pour les types de tableau. Par contre il n'y a pas de problème pour les fonctions.
pour le const, il est toujours optionnel en C, d'ailleurs la plupart des prog en C n'utilisent jamais const. Donc le compilateur est sensé avertir s'il compile en mode C++.
Marsh Posté le 08-05-2008 à 00:17:55
bonjour,
j'aimerai savoir pourquoi je ne peux pas faire :
alors que je peux faire :
merci ..