如何使用以下代码中的说明符%p
和%Fp
?
void main()
{
int i=85;
printf("%p %Fp",i,i);
getch();
}
我正在获得0000000000000055 0000000000000055
的o / p
如果这是你要问的,%p和%Fp打印出一个指针,特别是指针所指的地址,并且因为它打印出计算机体系结构的一部分,所以它以十六进制表示。
在C中,您可以在指针和int之间进行转换,因为指针只是一个32位或64位数(取决于机器架构),指的是前面提到的内存块。
当然,十六进制中的55是十进制的85。
%p用于打印指针地址。
十进制的85是十六进制的55。
在您的系统上,指针是64位,因此完整的十六进制表示为:0000000000000055
这是我机器的编译输出:
format.c:7:5:警告:格式'%p'需要类型为'void *'的参数,但参数2的类型为'int'[-Wformat]
format.c:7:5:警告:格式'%F'需要类型为'double'的参数,但参数3的类型为'int'[-Wformat]
所以有警告,但它确实编译,输出为:0x55 0.000000p
我很惊讶你最后没有得到一个p。你确定代码和输出匹配吗?我想i的地址也不是不可能是0x0 ... 055 ..但是这里看起来有些不对劲。
顺便说一句:%p的典型用法是打印一个地址,即&i而不是int
它的目的是以实现定义的格式打印指针值。相应的参数必须是void *
值。
并且%p
用于打印地址依赖于我们的系统位的指针的地址。
除了@Myforwik所说的
%p用于打印指针地址。
%Fp可能用于格式化FAR指针,其形式为 - >(0x1234:0x5678)
十进制的85是十六进制的55。
我希望现在好了。
参考文献: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
%p
用于打印地址,但您需要在ampersand
之前使用&
即i
运算符来获取i
的地址
因此,要获得变量i
的地址,正确的格式将是:
void main()
{
int i=85;
printf("%p %Fp", &i, &i);
getch();
}
如果你不使用&
那么你将得到i
中包含的值,在这种情况下是85
或55
in hex