在c中使用相同的数字初始化数组会导致不同的值

时间:2017-10-29 12:55:26

标签: c arrays

#include <stdio.h> 
int main () {

int n[ 10 ] = {002535}; /* n is an array of 10 integers */
int j;

/* output each array element's value */
for (j = 0; j < 10; j++ ) {
  printf("Element[%d] = %d\n", j, n[j] );
}

return 0;
}

上面的代码运行并返回第一个元素等于1373.你能解释一下吗?由于提供的整数中的填充,我无法理解数字被更改的原因。

输出结果如下:

Element[0] = 1373
Element[1] = 0
...
Element[9] = 0

2 个答案:

答案 0 :(得分:0)

在您的程序中,您正在初始化数组n -

int n[ 10 ] = {002535};

由于前导零,数字002535被解释为八进制数字。 因此,这会将八进制002535分配给n[0],即数组n中的第0个位置,其余的数组元素将使用{{1}进行初始化}。

0循环中,您使用格式说明符for打印它。

002535八进制值的十进制等值是1373.这就是为什么你得到%d为1373。

如果要打印八进制数作为输出,请使用Element [0]格式说明符:

%o

如果您希望将小数2535作为数组for (j = 0; j < 10; j++ ) { printf("Element[%d] = %o\n", j, n[j] ); 的第一个元素,请删除前导零:

n

答案 1 :(得分:0)

0开头的整数文字被解释为八进制数。并且02535八进制等效于十进制1373