"%p" printf 参数

The "%p" printf parameter

我有这个代码:

#include <stdio.h>
#include <string.h>

void main(){
       printf("%p");
}

这是输出: 0x7ffdd9b973d8

我知道 %p 代表指针,例如使用它时

#include <stdio.h>
#include <string.h>

void main(){
 int i = 0;
 printf("%p", i);
}

它return是i的指针地址。但是我的问题是 return 不在 printf 函数中添加任何其他参数只是 printf("%p")

的行为
printf("%p");

未定义。当您在格式字符串中指定 %p 格式时,void *(或 char *)类型的相应参数应出现在参数列表中。

垃圾。 printf 使用 variable-length 参数列表。它使用格式字符串来确定您实际传递了多少个参数。如果你实际上没有传递任何东西,它仍然会从基本上任意的内存部分读取,就好像你传递了一样。结果是 undefined/trash.

一些编译器能够通过警告捕获这种情况,因为 printf 系列函数非常流行。如果该函数试图从您无权访问的内存中读取,则在某些情况下可能会使您的系统崩溃。就算你得到了某个结果,也无法预知下一次它会如何表现。

But my question is what does it return when not adding any other argument in the printf function just printf("%p");

任何东西。没有什么。随机垃圾。也许它崩溃了。

如果不调查编译器、CPU、平台、库、执行环境等的特定组合,就无法知道。没有规则要求它以任何特定方式运行。