我无法理解打印前八个数组元素数组的输出

时间:2016-07-10 14:24:54

标签: c printf

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

  

0 1 8 9 100 101 110 111

我不明白为什么 8 9 是输出的一部分?为什么不打印 010 011 的值?

代码如下:

#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;
}

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

每当你使用int开始0时,它会将其作为八进制数(基数为8)(0-7)。

因此,它正在为0

打印000

1 001等等。