为什么只打印这些数字

时间:2015-06-02 05:10:42

标签: c pointers

以下是我的代码

main() 
{ 
 int c[ ]={2.8,3.4,4,6.7,5}; 
 int j,*p=c; 
 for(j=0;j<5;j++){ 
 printf(" %d ",*p); 
 ++p;   } 
} 

输出

2 3 4 6 5

如何执行上述代码?

4 个答案:

答案 0 :(得分:2)

它的执行完全按照您认为执行的方式执行:您在for循环中打印数组元素,但是,您将数组元素设为int,因此,当打印2.8为双倍时,编译器会忽略该点之后的任何内容,意味着它将其视为2而不是2.8

答案 1 :(得分:2)

撰写声明时:

 int c[ ]={2.8,3.4,4,6.7,5};

十进制值自动转换为整数。因此数组存储

  2,3,4,6,5

所以你的输出就像它一样。 要使用小数,请使用float类型变量。

  float c[ ]={2.8,3.4,4,6.7,5};

答案 2 :(得分:0)

int c[]是整数。你可以试试。

float c[] = { 2.8, 3.4, 4, 6.7, 5 };
float  *p = c;
for (int j = 0; j<5; j++){
    printf(" %f ", *p);
    p = p+1;
}

答案 3 :(得分:0)

如果你使用'float j'代替'int j'和'%f'而不是'%d',你会得到你想要的。 这里由于使用了int j和%d,只打印了数组中每个数字小数点前的部分。