2013-02-28 5 views
0

Salut J'ai une question sur les pointeurs doubles. Par exemple, dans ce code:Déréférencer un double pointeur juste une fois?

int a, b=2; 
int *iPtr1, **iPtr2; 

iPtr1 = &a; 
iPtr2 = &iPtr1; 
*iPtr1 = b+3; 
*iPtr2 = iPtr1; 

Sur la dernière ligne *iPtr2 = iPtr1; Il qui vient de dire iPtr1 au point à lui-même depuis déréférencement un double pointeur est juste une fois comme l'utilisation iPtr1?

+0

D'autres vous ont donné la réponse, mais j'ajouterai simplement que l'OMI est extrêmement utile pour dresser une petite carte de votre espace mémoire et montrer ce qui pointe vers quoi. Dans ce cas, vous auriez des carrés de mémoire pour a, b, iPtr1 et iPtr2. Initialement, un serait vide (non initialisé) et b serait 2. Ensuite, vous dessinez une flèche de iPtr1 à une (première ligne de code - 'iPtr1 = & a;'). Ensuite, vous dessinez une ligne de iPtr2 à iPtr1 pour la deuxième ligne de code. Continuez ainsi, en utilisant "*" pour dire "suivez la flèche et prenez ce qu'il y a". – Vicky

+0

Merci pour le pourboire! J'ai vraiment besoin de pratiquer l'écriture et le dessin sur comme vous dites que je tendance à plonger juste dans le codage et cela me coûte plus tard. Ouais – MeesterMarcus

Répondre

1

Tracez l'exécution avec gdb, puis vous verrez que la dernière ligne *iPtr2=iPtr1 ne change rien. (Il est un peu comme iPtr1=iPtr1)

Sur iPtr2 = &iPtr1;, les points déjà iPtr2 à l'adresse où iPtr1 LE POINTEUR se trouve pas l'adresse iPtr1 points.

Remarque: vous ne pouvez pas remplacer iPtr2=&iPtr1 avec un *iPtr2=iPtr1, parce qu'à ce moment iPtr2 a une valeur de déchets (si elle est une variable non statique locale) et le déréférencement est un comportement non défini.

+0

Merci pour l'info supplémentaire bonne réponse – MeesterMarcus

2

Il fait le point *iPtr2 à tout ce iPtr1 pointe. Et comme iPtr2 des points à iPtr1 il est le même que iPtr1 = iPtr1.

+0

c'est ce que je pensais. Je suppose que mon professeur essayait juste de nous tromper ou peut-être d'erreur. – MeesterMarcus

Questions connexes