En comparant les adresses de mémoire
Comment pourrais-je comparer les deux adresses de la mémoire à partir d'un fixe de taille moyenne char tableau? Disons que j'ai deux pointeurs, chacun pointant vers un autre emplacement de mémoire dans le tableau:
char *ptr1; //points to a memory address in the array;
char *ptr2; //points to another memory address in the array;
Si je ne printf("%p\n%p\n", ptr1, ptr2);
ensuite, il permet d'imprimer les adresses de mémoire comme hexadécimal.
output:
0x601240
0x601274
comment aurais-je stocker dans des variables et sont-ils comparables, de sorte que je peut dire quelle est l'adresse de mémoire vient en premier dans le tableau.
Une autre question:
Au lieu de %p si je n' %d pour imprimer l'adresse de la mémoire-je obtenir:
output:
6296128
6296180
sont-ils valides adresses de mémoire(je veux dire, est-ce sûr à utiliser)?
OriginalL'auteur user2644819 | 2013-12-09
Vous devez vous connecter pour publier un commentaire.
Les valeurs hexadécimales sont juste représentation de l'adresse dans les pointeurs. Pour comparer deux pointeurs(qui pointent vers des éléments d'un même tableau ou d'un passé la fin du tableau), vous pouvez utiliser le code
Comme pour le spécificateur de format,
%d
n'est pas pour les pointeurs(bien que dans certaines implémentations, il imprime la valeur correcte, vous ne devriez pas l'utiliser), l'utilisation%p
pourvoid *
pointeurs:if (ptr1 > 0x700000) return -1;
valide?OriginalL'auteur Yu Hao
0x601240
est la représentation hexadécimale, et6296128
la représentation décimale, exactement le même nombre. De même,0x601274
est égal à6296180
. Le0x
est l'indication que ce qui suit est au format hexadécimal.Dans votre code C/C++, les valeurs de
ptr1
etptr2
peut être comparé avec<
ou>
pour déterminer celui qui vient en premier dans le tableau. (Cela peut être fait sans se soucier des diverses manières dont elles peuvent être représentées à l'aide deprintf
.)%d
qui s'est passé pour montrer la valeur décimale de l'adresse dans ce cas, le comportement lors de l'%d
est utilisé pour formater un pointeur n'est pas défini par la norme, et il n'est généralement pas sûr de compter sur elle.OriginalL'auteur jez
ces deux sorties sont les mêmes, et a la même valeur. la première est en hexa, et le deuxième est le système décimal.
Vous pouvez comparer ces deux pointeurs, et tous les autres pointeurs, et vous pouvez aussi faire de l'arithmétique des pointeurs avec eux (soustraire, etc.), si vous le souhaitez.
Toutefois, si votre programme doit être portable, cela peut être très délicat. par exemple, vérifiez si la pile grandit vers le haut ou vers le bas, cela peut changer la comparaison que tu veux faire...
Oui, j'ai raté la partie où il dit qu'il est pointeur vers des objets sur le même tableau. Néanmoins, je pense que c'est important de le mentionner, comme dans le cas plus général, vous avez besoin de prendre cela en considération.
OriginalL'auteur yosim