这是我的代码:
#include "stdio.h"
#include "stdlib.h"
int main()
{
char array[50];
int i = 0;
while (i < 50)
{
array[i] = rand();
printf("%d\n", array[i]);
i = i + 1;
}
return 0;
}
所以我生成伪随机数并将其放入数组,但是我的数组是char,而我输入的是整数。那为什么我可以使用%d?我以为%d告诉printf array [i]是一个4字节的整数,而printf应该转换为字符串。但是array [i]是char而不是int。有人可以向我解释一下。
答案 0 :(得分:2)
printf
是可变参数函数。这意味着您可以向其传递任意数量的参数,然后该函数需要有一种方法来弄清楚它们是什么。 printf
使用第一个参数,格式字符串,必须与其他参数匹配。
现在,当您传递任何较短的整数作为可变参数时,它将提升为int
类型。与无符号类型相同。 char
会发生这种情况,它会提升为int
(或unsigned int
,具体取决于平台)。另一个示例是float
被提升为double
,这就是为什么您没有用于打印float
的格式的原因,%f
也会打印double
(检查文档如有疑问)。
对于printf
来说,这意味着%c
格式实际上使用了int
值(或者是无符号的,取决于平台),因此您可以使用%d
打印它而不会出现问题。 (假设char
在您的平台上签名)。
在某些平台上,char
是无符号的,并且如果启用了编译器警告,则实际上会收到警告,尝试使用%d
打印无符号值,这可能(在这种情况下,< em>非常从理论上讲,但仍然)由于未定义行为而引起有趣的事情。