我试图用7个元素打印float数组的值。我只分配了3个值,它们属于float,double和integer。
代码:
#include <stdio.h>
int main(){
float array [7];
float f = 3.24;
double d = 23.5;
int i = 4;
array[0] = f;
array[1] = i;
array[2] = d;
int n = sizeof(array)/sizeof(float);
printf("Number of Elements : %d \n\n\n",n);
for(int j = 0; j < n ; j++){
printf("%.2f ,",array[j]);
}
printf("\b ");
}
我得到如下输出: 元素数量:7
3.24,4.00,23.50,-1。#R,96627196995476105000000000000000.00,96629547147269436000000000000000.00,0.00
我想清楚我的代码是否正确?为什么最后四个值彼此不同。这些价值是什么?
答案 0 :(得分:4)
最后一个值在C中称为垃圾值。 如果您没有在C中显式初始化变量,那么在您明确地为其赋值之前,它的值可能是任何值。这一切都可能是垃圾;语言标准没有规定它应该是什么。
您可以阅读此博客,了解C编译器如何决定垃圾值:http://blog.aditech.info/2008/02/how-c-compiler-decides-garbage-values.html。
答案 1 :(得分:2)
首先
是的,您的代码是正确的(尽管在return 0
函数的末尾添加了main()
命令)。但是,它需要更具体,这将导致您的第二个问题。
第二
C是一种允许程序员做很多事情的语言,但它也需要程序员进行大量的手动编码。
因此,当您声明一个包含7个项目的数组时,C编译器会标记一个内存区域以容纳这些项目(在这种情况下为float
类型)。但在显式分配值之前,它实际上并未检查该内存区域。在你的情况下,最后四个值(你自己没有分配)只是在为你的数组标记的内存区域中的垃圾。
再次,编译器在声明数组时 为您清除内存,它只标记内存区域。您有责任为数组指定默认值。
您可能的解决方案是手动将数组的所有元素初始化为某个默认值(例如,0
),如下所示:
float array[7] = {0}