petite question sur les pointeurs

petite question sur les pointeurs - C++ - Programmation

Marsh Posté le 06-11-2002 à 14:42:42    

par exemple j'ai :
 
int* i;
 
est-il possible d'écrire
(*i) = 10;
pour que l'int pointé par i soit égal à 10 ?
 
et encore une question :
 
j'ai :
 
int* i;
int j;
 
si jms l'écriture du dessus est juste :
(*i) = 10;
 
donc est-il possible d'écrire :
(&j) = i;
 
pour que i et j pointent vers le mm nombre ?


---------------
-( BlackGoddess )-
Reply

Marsh Posté le 06-11-2002 à 14:42:42   

Reply

Marsh Posté le 06-11-2002 à 14:50:16    

blackgoddess a écrit a écrit :

par exemple j'ai :
 
int* i;
 
est-il possible d'écrire
(*i) = 10;
pour que l'int pointé par i soit égal à 10 ?




>> utilisation normale du pointeur
 

Citation :


et encore une question :
 
j'ai :
 
int* i;
int j;
 
si jms l'écriture du dessus est juste :
(*i) = 10;
 
donc est-il possible d'écrire :
(&j) = i;
 
pour que i et j pointent vers le mm nombre ?


 
fait plutot ca
j=(*i);  la tu copie la valeur c est mieux ke d utiliser la meme adresse en memoire(moins dangereux et + comprehensible pour la maintenance)


Message édité par nicolasm le 06-11-2002 à 14:50:51
Reply

Marsh Posté le 06-11-2002 à 14:53:56    

blackgoddess a écrit a écrit :

par exemple j'ai :
 
int* i;
 
est-il possible d'écrire
(*i) = 10;
pour que l'int pointé par i soit égal à 10 ?


Sans faire un i = new int ;ça va être dur..
 

blackgoddess a écrit a écrit :

et encore une question :
 
j'ai :
 
int* i;
int j;
 
si jms l'écriture du dessus est juste :
(*i) = 10;
 
donc est-il possible d'écrire :
(&j) = i;
 
pour que i et j pointent vers le mm nombre ?



Nop, faut que t'écrives i = &j (pas besoin de new là) pour que i pointent vers j..

Reply

Marsh Posté le 06-11-2002 à 15:01:01    

(désolé pour l'oubli du new) et merci @ tt les 2, me voila éclairé :)


---------------
-( BlackGoddess )-
Reply

Marsh Posté le 06-11-2002 à 15:35:11    

Et n'oublie pas le delete :)

Reply

Marsh Posté le 06-11-2002 à 15:46:10    

lol wé c vrai new fonctionne tjs avec delete (en tout cas il vaut mieux :))


---------------
-( BlackGoddess )-
Reply

Marsh Posté le 06-11-2002 à 15:58:52    

*syl* a écrit a écrit :

Sans faire un i = new int ;ça va être dur..




 
Mais bien sur que non! On peut tres bien utiliser les pointeurs pour faire autre chose que de l'allocation dynamique de mémoire!!!

Code :
  1. int a;
  2. int* p = &a;
  3. *p = 2; // a = 2 maintenant


Ou encore :  

Code :
  1. void swap(int* a, int* b)
  2. {
  3. int temp = *a;
  4. *a = *b;
  5. *b = temp;
  6. }

Reply

Marsh Posté le 06-11-2002 à 16:01:55    

Ace17 a écrit a écrit :

 
 
Mais bien sur que non! On peut tres bien utiliser les pointeurs pour faire autre chose que de l'allocation dynamique de mémoire!!!


Hé mec, relis mon post et tu verras que ton message n'a pas lieu d'être.. :p

Reply

Marsh Posté le 06-11-2002 à 16:04:56    

*syl* a écrit a écrit :

Hé mec, relis mon post et tu verras que ton message n'a pas lieu d'être.. :p  




Ben je veux bien te faire confiance; désolé si je t'ai mal compris :)
mais explique moi ce que j'ai loupé dans ton post  :p

Reply

Marsh Posté le 06-11-2002 à 16:05:34    

oui il n'a p-e pas lieu d'être mais l'exemple de la fonction swap m'interresse bcp, merci à toi aussi


---------------
-( BlackGoddess )-
Reply

Marsh Posté le 06-11-2002 à 16:05:34   

Reply

Marsh Posté le 06-11-2002 à 16:07:01    

Ace17 a écrit a écrit :

 
Ben je veux bien te faire confiance; désolé si je t'ai mal compris :)
mais explique moi ce que j'ai loupé dans ton post  :p  




Ça :

blackgoddess a écrit a écrit :

et encore une question :
 
j'ai :
 
int* i;
int j;

 
si jms l'écriture du dessus est juste :
(*i) = 10;
 
donc est-il possible d'écrire :
(&j) = i;
 
pour que i et j pointent vers le mm nombre ?



Nop, faut que t'écrives i = &j (pas besoin de new là) pour que i pointent vers j..

Reply

Marsh Posté le 06-11-2002 à 16:10:01    

lol ok ; bon on va dire que c'était pas assez clair pour moi :-)

Reply

Marsh Posté le 07-11-2002 à 05:01:35    

Citation :

int* i;
 
est-il possible d'écrire
(*i) = 10;
pour que l'int pointé par i soit égal à 10 ?

On t'as déjà répondu que oui, mais je rajoute:
Si p est un pointeur, *p est l'objet pointé, avec toutes ses propriétés et ses possibilités.

Code :
  1. *p= 0; //écrire dans un entier
  2. (*p).mem ;//accéder au membre d'une structure
  3. (*p)() ; //appeler une fonction
  4. (*p)[n] ; //indicer un tableau
  5. &(*p) ; //la même adresse que dans le pointeur

Ce principe de pouvoir intact est important, car il s'applique à toutes les constructions du C, et permet d'aller asser loin:

Code :
  1. a[i](); //appel d'un pointeur de fonction issu d'un tableau.
  2. f().ma[i]; //indicer un tableau membre d'une structure renvoyée par une fonction
  3. (t ? f1 : f2)() ; //appel d'une fonction différente selon t
  4. (*(t ? &i : &j))++ ; //incrémenter i (t vrai) ou j (t faux)

On peut faire pire... il n'y a pas de limite de taille.
 
 

Citation :

int* i;
int j;
 
si jms l'écriture du dessus est juste :
(*i) = 10;
 
donc est-il possible d'écrire :
(&j) = i;
 
pour que i et j pointent vers le mm nombre ?

Non.
L'adresse d'un objet/variable n'est pas une variable (lvalue) mais une valeur (rvalue).
lvalue fait référence au fait que l'objet peut apparaître à gauche (Left) du signe "=", sans considérer l'éventuelle constance.
rvalue est l'opposé: une valeur, et on ne peut pas changer la valeur d'une valeur, seulement générer une autre valeur.
 
Typiquement, on peut prendre l'adresse d'une rvalue (son stockage), pas d'une valeur.
 
En fait, C se contente d'évaluer les expressions, il ne peut pas faire le chemin inverse de choisir les termes de l'expression pour que le résultat soit bon.
La différence entre le pas-à-pas du programmeur et l'équation du mathématiciens...


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed