c - 我无法理解打印第一个八个数组元素的数组的输出

标签 c printf

<分区>

我试图了解如何为给定代码生成以下输出。大小为八个元素的数组存储代码中提到的数字。这是它生成的输出:

0 1 8 9 100 101 110 111

我不明白的是为什么 89 是输出的一部分?为什么不打印值 010011

代码如下:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int i;
    int a[8] = {000,001,010,011,100,101,110,111};

    for(i=0 ; i<8 ; i++)
        printf("%d  ",a[i]);

    return 0;
}

最佳答案

任何以0 开头的整数文字都被视为八进制 表示。在您的代码中,您使用八进制数初始化一些数组成员,然后打印出它们的十进制表示形式(使用 %d 格式说明符)。

因此,您的期望和输出不同。

基本上,十进制形式的初始化看起来像

 int a[8] = {0,1,8,9,100,101,110,111}; //first 4 initializers are converted to decimal.

另一方面,为了完成,如果您使用 %o 格式说明符(八进制表示),您可以看到前四个初始化器,如您所料,但最后四个也将打印为八进制,如

 printf("%o  ",a[i]);

会给你一个输出

0 1 10 11 144 145 156 157

关于c - 我无法理解打印第一个八个数组元素的数组的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38292928/

相关文章:

php - 使用 printf 调用图像

c - 十六进制被截断

c++ - sprintf 比 print 占用更多空间?

C编译器警告 "Warning: too many arguments for format"如何修复?

c - 静态函数如何在内部映射?

c - IOCTL - 了解文件描述符参数

有人可以解释在 Pebble C Watchface 教程中找到的部分代码吗?

c - 为什么这个程序不能给我想要的输出?

c - 开放地址哈希表中的 'vacated'只能存储一个变量吗?

c - 从 oprofile 获得最有用输出的最佳方法是什么?