我有这段代码:
#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);
}
它返回i
的指针地址。但我的问题是,当不在printf函数中添加任何其他参数时,它会返回什么printf("%p")
答案 0 :(得分:4)
的行为
printf("%p");
未定义。在格式字符串中指定%p
格式时,参数列表中应存在void *
(或char *
)类型的相应参数。
答案 1 :(得分:4)
回收站。 printf
使用可变长度参数列表。它使用格式字符串来确定实际传递的参数数量。如果你实际上没有传入任何内容,它仍然会从内存的基本任意部分读取,就像你那样。结果是undefined / trash。
有些编译器能够通过警告来捕获这种情况,因为printf
系列函数非常受欢迎。如果函数尝试从您无权访问的内存中读取,某些情况可能会导致系统崩溃。即使你已经获得某种结果,也无法告诉它下次的行为。
答案 2 :(得分:4)
但我的问题是,如果不在printf函数中添加任何其他参数,只返回printf(“%p”);
任何。没有。随机垃圾。也许它会崩溃。
如果不调查编译器,CPU,平台,库,执行环境等的特定组合,就无法知道。没有任何规则要求它以任何特定方式运作。