C编程:如果我将整数放入char数组中,那么打印出来的数字是什么类型?

时间:2018-09-24 20:41:00

标签: c

这是我的代码:

#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。有人可以向我解释一下。

1 个答案:

答案 0 :(得分:2)

printf是可变参数函数。这意味着您可以向其传递任意数量的参数,然后该函数需要有一种方法来弄清楚它们是什么。 printf使用第一个参数,格式字符串,必须与其他参数匹配。

现在,当您传递任何较短的整数作为可变参数时,它将提升为int类型。与无符号类型相同。 char会发生这种情况,它会提升为int(或unsigned int,具体取决于平台)。另一个示例是float被提升为double,这就是为什么您没有用于打印float的格式的原因,%f也会打印double(检查文档如有疑问)。

对于printf来说,这意味着%c格式实际上使用了int值(或者是无符号的,取决于平台),因此您可以使用%d打印它而不会出现问题。 (假设char在您的平台上签名)。

在某些平台上,char是无符号的,并且如果启用了编译器警告,则实际上会收到警告,尝试使用%d打印无符号值,这可能(在这种情况下,< em>非常从理论上讲,但仍然)由于未定义行为而引起有趣的事情。