%p c中的格式说明符

时间:2012-09-28 03:05:43

标签: c format-specifiers

说明符%p%Fp如何在以下代码中工作?

void main() 
{
    int i=85;

    printf("%p %Fp",i,i);

    getch();   
}

我将o / p作为0000000000000055 0000000000000055

6 个答案:

答案 0 :(得分:19)

如果这是你要问的,%p和%Fp会打印出一个指针,特别是指针所指的地址,并且由于它打印出计算机体系结构的一部分,所以它以十六进制表示。< / p>

在C中,你可以在指针和int之间进行转换,因为指针只是一个32位或64位的数字(取决于机器架构),指的是前面提到的内存块。

当然,十六进制中的55是十进制的85。

答案 1 :(得分:2)

%p用于打印指针地址。

十进制的85是十六进制的55。

在你的系统指针是64位,所以完整的十六进制表示是:0000000000000055

答案 2 :(得分:2)

这是我机器的编译输出:

format.c:7:5:警告:格式'%p'需要'void *'类型的参数,但参数2的类型为'int'[-Wformat]

format.c:7:5:警告:格式'%F'需要类型为'double'的参数,但参数3的类型为'int'[-Wformat]

所以有警告,但它确实编译,输出是: 0x55 0.000000p

我很惊讶你最后没有得到一个p。你确定代码和输出匹配吗?我想我的地址也不是不可能是0x0 ... 055 ..但是这里看起来不对。

btw:%p的典型用法是打印一个地址,即&amp; i而不是int

答案 3 :(得分:2)

它的目的是以实现定义的格式打印指针值。相应的参数必须是void *值。

并且%p用于打印地址依赖于我们系统位的指针的地址。

答案 4 :(得分:1)

除了@Myforwik所说的

%p用于打印指针地址。

%Fp可能用于格式化FAR指针,其形式为 - &gt; (0×1234: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

答案 5 :(得分:0)

%p用于打印地址,但您需要在ampersand之前使用&i运算符来获取i的地址

因此,要获取变量i的地址,正确的格式应为:

void main() 
{
    int i=85;

    printf("%p %Fp", &i, &i);

    getch();   
}

如果您不使用&,那么您将只得到i中包含的值,在这种情况下,其值为十六进制的8555