% p Spécificateur de format dans c
Comment sont les prescripteurs %p
et %Fp
de travail dans le code suivant?
void main()
{
int i=85;
printf("%p %Fp",i,i);
getch();
}
J'obtiens l'o/p, comme 0000000000000055 0000000000000055
source d'informationauteur poorvankBhatia
Vous devez vous connecter pour publier un commentaire.
Si c'est ce que vous demandez, %p et %Fp imprimer un pointeur, plus précisément à l'adresse à laquelle le pointeur se réfère, et puisque c'est l'impression d'une partie de l'architecture de votre ordinateur, il le fait en Hexadécimal.
En C, vous pouvez convertir entre un pointeur et un entier (int), depuis un pointeur est un 32 bits ou 64 bits (en fonction de l'architecture de la machine), se référant à ladite partie de la mémoire.
Et bien sûr, 55 dans l'hexagone 85 en décimal.
Voici la compilation sortie de ma machine:
format.c:7:5: attention: format ‘%p’ attend argument de type ‘void *’, mais l'argument 2 est de type ‘int’ [-Wformat]
format.c:7:5: attention: format ‘%F’ attend argument de type "double", mais l'argument 3 est de type ‘int’ [-Wformat]
donc il y a des avertissements, mais il ne la compilation et la sortie est:
0x55 0.000000 p
Je suis surpris que vous n'obtenez pas un p à la fin. Êtes-vous sûr de code et de sortie correspond? Je suppose qu'il n'est pas impossible pour l'adresse de je aussi 0x0...055..mais quelque chose semble mal ici.
btw: l'utilisation typique de %p serait d'imprimer une adresse c'est à dire &j'ai plutôt un int
Dont le but est d'imprimer une valeur de pointeur de la mise en œuvre des formats définis. L'argument correspondant doit être un
void *
valeur.Et
%p
est utilisé pour l'impression de l'adresse d'un pointeur les adresses sont en fonction de notre système de bits.%p est pour l'impression d'un pointeur d'adresse.
85 en décimal est de 55 en hexadécimal.
Sur votre système de pointeurs sont 64 bits, de sorte que le plein en hexadécimal de la représentation est: 0000000000000055
Plus de ce que @Myforwik dit
%p est pour l'impression d'un pointeur d'adresse.
%Fp est probablement utilisé pour formater un pointeur LOIN ce qui est du formulaire --> (0x1234:0x5678)
et 85 en décimal est de 55 en hexadécimal.
J'espère que sa va mieux maintenant.
Références :
http://www.lix.polytechnique.fr/~liberti/public/computing/prog/c/C/FUNCTIONS/format.html
http://www.winehq.org/pipermail/wine-devel/2005-March/034390.html