gpt4 book ai didi

c - 如果我们在打印 int 时使用 %p 而不是 %d 会发生什么

转载 作者:太空宇宙 更新时间:2023-11-04 05:23:31 24 4
gpt4 key购买 nike

有人可以解释第二行的输出吗?

int x=10;
printf("%d\n",x);
printf("%p\n",x);
printf("%p\n",&x);

输出:

10
0000000a
006aff0c

最佳答案

在您的例子中,它似乎将值 10 视为一个指针,并将其输出为一个 eigth-digit,在左侧补零,十六进制数(一)

但是,根据 C11 7.21.6.1 fprintf 函数/9(以下所有标准引用也引用 C11):

If a conversion specification is invalid, the behavior is undefined. If any argument is not the correct type for the corresponding conversion specification, the behavior is undefined.

所以,从字面上看,任何事情都是允许发生的。您通常希望尽可能避免未定义的行为,因为行为可能会在实现、版本甚至星期几之间发生变化:-)

您的第三 线路在技术上也存在问题。标准规定,在 7.21.6.1/8 中,对于 p 转换说明符:

The argument shall be a pointer to void. The value of the pointer is converted to a sequence of printing characters, in an implementation-defined manner.

因为 &x 实际上是一个指向 int 的指针,这就违反了同一个约定。您可能应该改用这样的东西:

printf ("%p\n", (void*)(&x));

(a)实际上所做的是实现定义的,正如上面最后引述中的第二句。它基本上可以做任何事情,只要实现对其进行记录,如 J.3 实现定义的行为 中所指定:

A conforming implementation is required to document its choice of behavior in each of the areas listed in this subclause.

关于c - 如果我们在打印 int 时使用 %p 而不是 %d 会发生什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46029157/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com