Obtenir l'adresse d'un pointeur
Mes excuses, je sais qu'il y a un million de questions sur les pointeurs, les tableaux etc. bien que de base que cela est que je n'arrive pas à trouver quelque chose de pointage (ha ha!) pour une réponse.
J'ai un pointeur est initialisé au point pour une partie de la mémoire, je comprends que je peux accéder à cette mémoire similaire à la façon dont je le ferais un tableau:
char *mMem=new char[5000];
cout<<mMem[5]<<endl;
Qui est en réalité:
char *mMem=new char[5000];
cout<<*(mMem+5)<<endl;
Ce que je ne comprends pas bien c'est comment faire pour obtenir l'adresse d'un élément - je suis au courant de cet élément n'est pas tout à fait le mot juste en considérant mMem n'est pas un tableau - que, si ma compréhension est correcte, ne peut pas être trop sûr de bien car il semble que chaque site utilise les mots qu'il veut quand il s'agit de pointeurs et les tableaux. Donc, si j'ai:
char *mMem=new char[5000];
cout<<mMem[5]<<endl;
or
cout<<*(mMem+5)<<endl;
pourquoi l'adresse de l'opérateur de ne pas fonctionner correctement:
cout<<&mMem[5]<<endl;
Au lieu d'obtenir l'adresse de la 5ème élément, - je obtenir une copie imprimée du bloc de mémoire le contenu de cet élément à partir. Alors, pourquoi l'adresse de l'opérateur ne fonctionne pas comme je m'attendais et comment puis-je obtenir l'adresse d'un élément de la mémoire?
OriginalL'auteur R4D4 | 2011-07-22
Vous devez vous connecter pour publier un commentaire.
&mMem[5]
est l'adresse de la 5ème élément. La raison pourquoi vous obtenez une copie de la mémoire à partir de là, c'est parce qu'ils type de&mMem[5]
estchar*
, mais les chaînes en héritage C sont également dechar*
, de sorte que le<<
opérateur simplement pense que vous voulez imprimer une chaîne de caractères à partir de là. Je voudrais essayer de couler le pointeur vers unvoid*
avant l'impression:Par la voie,
&mMem[5]
etmMem+5
sont les mêmes.OriginalL'auteur Tamás
Vous obtenez l'adresse de l'élément 5 que vous attendez, mais le
cout
des fonctionnalités d'impression pour unechar *
est d'imprimer le contenu de la chaîne à cet emplacement de la mémoire, pas la valeur du pointeur.Cast le pointeur vers un int:
cout << (int)&mMem[5];
et vous devriez obtenir l'adresse imprimée.OriginalL'auteur Anders Abel