C adresse de pointeur impression
Je suis en train d'apprendre le C pointeurs et adresses pour la première fois et comment l'utiliser sur ma tablette
Disons:
int x = 1, y = 2;
int *ip; //declares *ip as an int type?
ip = &x; //assigns the address of x to ip?
y = *ip; //y is now 1 via dereferencing
Sont tous les commentaires des explications correctes?
Ce qui se passe si je imprimer le résultat de la propriété intellectuelle? Il imprime l'adresse de la variable x, quelque chose comme
011001110
Curieux de savoir pourquoi vous n'essayez pas?
Je voudrais parole le premier commentaire que "déclare la propriété intellectuelle comme un pointeur de type int". Le reste a l'air bien. Aussi loin que l'impression
Je voudrais parole le premier commentaire que "déclare la propriété intellectuelle comme un pointeur de type int". Le reste a l'air bien. Aussi loin que l'impression
ip
, oui, vous obtenez l'adresse de x
. Le format de l'adresse tout dépend de quel chaîne de format que vous utilisez pour imprimer. Vous pouvez l'écrire en décimal, hexadécimal, ou quoi que ce soit.
OriginalL'auteur Robert Rocha | 2014-01-14
Vous devez vous connecter pour publier un commentaire.
Oui. L'ensemble de vos déclarations sont exactes. Toutefois, dans le cas de la première
il est mieux de dire que
ip
est un pointeur vers uneint
type.Il permet d'imprimer l'adresse de
x
.Pas. Les adresses sont généralement représentés en hexadécimal. Vous devez utiliser
%p
rédacteur de devis pour imprimer l'adresse.REMARQUE:
Notez que, dans la déclaration ci-dessus
*
n'est pas l'opérateur d'indirection. Au lieu de cela il préciser le type dep
, de dire au compilateur quep
est un pointeur versint
. Le*
symbole effectue indirection uniquement lorsqu'elle apparaît dans un énoncé.Pas de.
*
dans la déclaration n'est pas un opérateur de déréférencement.ainsi, dans la déclaration ci-dessus * est la spécification de la propriété intellectuelle comme un pointeur?
Exactement.
Il n'y a pas de pointeur type. Il y a des pointeurs types.
OriginalL'auteur haccks
OriginalL'auteur Andrew L
Considèrent comme un exemple:
Comme vous pouvez le voir:
x
a la valeur1
et l'adresse1000
y
a la valeur2
et l'adresse1004
ip
a la valeur1000
(l'adresse dex
) et l'adresse1008
De considérer les éléments suivants:
x == 1
et&x == 1000
y == 2
et&y == 1004
ip == 1000
et&ip == 1008
et*ip == 1
(la valeur dex
)Espère que cela vous aide à visualiser ce qui se passe.
OriginalL'auteur Fiddling Bits
C'est tout à fait correct.
1ère ligne: vous déclarer deux variables
2e ligne: un pointeur de mémoire "ip" est défini
3ème ligne: La mémoire de l'adresse de X est donnée à l'indicateur ip
4e ligne: Y est maintenant fixé à la valeur de la variable X à l'adresse ip
L'adresse de la mémoire, cependant, est dans le format hexadécimal. 011001110 est un octet de données, et non pas une adresse de mémoire. L'adresse est plus susceptible d'être quelque chose comme 0x000000000022FE38 (il peut être plus courte). Considérez ceci:
Ce serait d'imprimer l'adresse de X, plutôt que d' *ptr. Vous auriez besoin d'un autre pointeur pour imprimer l'adresse de *ptr. Mais c'est plutôt inutile, comme un pointeur est défini pour imprimer l'adresse d'une variable. Penser que c'est un alias pour une autre variable (la valeur est la valeur à l'adresse mémoire).
OriginalL'auteur Adrian Zhang