est le seul moyen d'obtenir l'adresse d'une adresse en C (en face de la double déséroférence pour avoir une variable intermédiaire?
Par exemple, j'ai: p> mais Vous pouvez faire l'inverse, par exemple p> par exemple, je n'ai pas à faire: p> Pourquoi les deux Les opérateurs pas symétriques dans leur fonctionnalité? p> p>
7 Réponses :
L'adresse de l'adresse de quelque chose n'est pas possible, car une adresse de l'adresse serait ambiguë p>
Vous pouvez obtenir l'adresse de quelque chose qui détient l'adresse de quelque chose et que vous pourriez avoir de multiples survenues de cela (avec différentes valeurs) p>
L'adresse de l'opérateur retourne une rvalue, et vous ne pouvez pas prendre l'adresse d'une rvalue (voir ici pour une explication des différences entre les rvalues et les lvalues). P>
Par conséquent, vous devez le convertir en une lvalue en le stockant dans une variable, vous pouvez alors prendre l'adresse de cette variable. P>
Eh bien, c'est précis mais si l'OP pose cette question, les r devalues sont probablement un concept assez avancé ...
@RODDY, TRUE, j'ai ajouté un lien vers l'article MSDN expliquant ces concepts.
Il n'y a pas d'autre que l'adresse d'une adresse. Vous avez une boîte, avec un numéro dessus. C'est le numéro de la boîte dans la séquence de mémoire. Il n'y a pas d'endroit qui stocke ces chiffres. Cela serait également extrêmement récursif comme vous pouvez le voir. P>
Si vous pensez un instant, vous remarquerez que pour obtenir l'adresse de quelque chose, elle doit être en mémoire.
Si vous avez une variable P>
int a
Mettez simplement, seules les choses physiquement détenues dans la mémoire des ordinateurs peuvent avoir une adresse. Il suffit de demander que l'adresse de quelque chose ne signifie pas que l'adresse est stockée en mémoire. p>
Lorsque vous avez un pointeur intermédiaire, vous le stockez maintenant en mémoire et vous prenez l'adresse où elle est stockée. P>
Lorsque vous demandez une adresse à l'aide de "&", vous demandez à l'adresse quelque chose de stocké en mémoire. Utilisation '&' 2 fois signifie que vous souhaitez obtenir l'adresse d'une adresse qui n'est pas sens.
Au fait, si vous utilisez une variable intermédiaire comme vous le faites, vous obtiendrez l'adresse de la variable intermédiaire. . Ce qui signifie que si vous utilisez 2 variable intermédiaire pour comparer les adresses, ils seront différents.
par exemple: p>
Cette réponse est douteuse, "plop" code> n'est pas une variable mais & "plop" code> est valide.
Il est probablement plus facile d'expliquer avec un exemple de mise en page de mémoire comme celui-ci: mais la variable A code> a une adresse (1000) ce qui devrait s'adresser à un adresse moyenne si ce n'est pas l'adresse d'un pointeur? & a code> est une station finale. Ainsi, && a code> n'aurait aucun sens. P> p>
Parce que le pointeur doit pointer sur une mémoire. Donc,
pTR_A = & A code> signifie que PTR_A pointe sur a. Mais,&& a code> -> il n'y a pas de "pointeur" sur lequel le pointeur peut pointer. PTR_A est une mémoire sur la pile, vous pouvez donc pointer dessus.Il n'y a aucune raison de compliquer les choses:
int * pTR_PTR_A = & pTR_A; code> va bien.bien sûr - a du sens après avoir souligné cela - merci beaucoup