20

以下代码中的说明符%p和工作方式如何?%Fp

void main() 
{
    int i=85;

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

    getch();   
}

我得到 o/p 为 0000000000000055 0000000000000055

4

6 回答 6

28

如果这是您要问的,%p 和 %Fp 打印出一个指针,特别是指针所指的地址,并且由于它打印出您计算机体系结构的一部分,因此它以十六进制形式打印。

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

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

于 2012-09-28T03:17:10.350 回答
2

%p 用于打印指针地址。

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

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

于 2012-09-28T03:14:03.753 回答
2

这是我机器的编译输出:

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

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

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

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

顺便说一句: %p 的典型用法是打印地址,即 &i 而不是 int

于 2012-09-28T04:19:02.317 回答
2

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

并且%p用于打印指针的地址,地址取决于我们的系统位。

于 2012-09-28T05:18:44.797 回答
1

除了@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-三月/034390.html

于 2013-08-01T15:06:50.233 回答
1

%p用于打印地址,但您需要先使用ampersandie&运算符才能i获取地址i

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

void main() 
{
    int i=85;

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

    getch();   
}

如果你不使用&,那么你只会得到包含在i这种情况下是8555十六进制的值

于 2019-04-28T13:11:17.697 回答