C 为什么我的浮点数组中的元素显示';如果数组较长,则不是数字事件?
当我创建应该包含5个元素的数组时,它显示索引为4的元素不是数字,为什么会发生这种情况?以下是我的部分代码:C 为什么我的浮点数组中的元素显示';如果数组较长,则不是数字事件?,c,C,当我创建应该包含5个元素的数组时,它显示索引为4的元素不是数字,为什么会发生这种情况?以下是我的部分代码: float yearsAvg[5]; printf("%f\n", yearsAvg[4]); // it's outputing -nan in the console 随机索引上的其他数组也会发生这种情况,我不知道为什么,有人能给我解释一下吗?使用未初始化的数组将包含一个垃圾值,使用它们将产生一些意想不到的结果。要修复它,只需初始化它: // Initializi
float yearsAvg[5];
printf("%f\n", yearsAvg[4]); // it's outputing -nan in the console
随机索引上的其他数组也会发生这种情况,我不知道为什么,有人能给我解释一下吗?使用未初始化的数组将包含一个垃圾值,使用它们将产生一些意想不到的结果。要修复它,只需初始化它:
// Initializing each element of array with 0.0 value
float yearsAvg[5] = {0.0};
printf("%f\n", yearsAvg[4]);
继续看吧
注意:要对所有元素初始化
1.0
或其他内容,{1.0}
将不再是实现您期望的有效语法。这里有两个选项:
1。在不同的数组元素中分配不同的值时:
int my_array[3];
my_array[0] = 1;
my_array[1] = 5;
my_array[2] = 3;
int common_value = 50;
int my_array[5];
for (int i = 0; i < 5; i++)
my_array[i] = common_value;
2。或者,它们需要使用除零之外的公共值初始化:
int my_array[3];
my_array[0] = 1;
my_array[1] = 5;
my_array[2] = 3;
int common_value = 50;
int my_array[5];
for (int i = 0; i < 5; i++)
my_array[i] = common_value;
int公共值=50;
int my_数组[5];
对于(int i=0;i<5;i++)
my_数组[i]=公共_值;
也注意,<代码> { 3.5 } /COD>这类初始化在C++中是有效的,即,可以用这种方式分配包括零的值。
使用未初始化的数组将包含一个垃圾值,使用它们会产生一些意想不到的结果。要修复它,只需初始化它:
// Initializing each element of array with 0.0 value
float yearsAvg[5] = {0.0};
printf("%f\n", yearsAvg[4]);
继续看吧
注意:要对所有元素初始化
1.0
或其他内容,{1.0}
将不再是实现您期望的有效语法。这里有两个选项:
1。在不同的数组元素中分配不同的值时:
int my_array[3];
my_array[0] = 1;
my_array[1] = 5;
my_array[2] = 3;
int common_value = 50;
int my_array[5];
for (int i = 0; i < 5; i++)
my_array[i] = common_value;
2。或者,它们需要使用除零之外的公共值初始化:
int my_array[3];
my_array[0] = 1;
my_array[1] = 5;
my_array[2] = 3;
int common_value = 50;
int my_array[5];
for (int i = 0; i < 5; i++)
my_array[i] = common_value;
int公共值=50;
int my_数组[5];
对于(int i=0;i<5;i++)
my_数组[i]=公共_值;
也注意,<代码> { 3.5 } /COD>这类初始化在C++中是有效的,即,可以用这种方式赋值这些值,包括0。P>数组是指向一系列分配的内存地址的指针。
float yearsAvg[5];
分配5*(sizeof(float))[即5*4=20字节],指针指向第一个元素。现在,内存最初包含垃圾(随机)值,或者在您的情况下,NULL
由控制台中的-nan
表示
声明数组时,可以执行以下操作将所有值初始化为零
float yearsAvg[5] = { }; // yearsAvg = [0, 0, 0, 0, 0]
int yearsAvg[5] = { 0 }; // yearsAvg = [0, 0, 0, 0, 0]
数组是指向分配的一系列内存地址的指针
float yearsAvg[5];
分配5*(sizeof(float))[即5*4=20字节],指针指向第一个元素。现在,内存最初包含垃圾(随机)值,或者在您的情况下,NULL
由控制台中的-nan
表示
声明数组时,可以执行以下操作将所有值初始化为零
float yearsAvg[5] = { }; // yearsAvg = [0, 0, 0, 0, 0]
int yearsAvg[5] = { 0 }; // yearsAvg = [0, 0, 0, 0, 0]
数组未初始化,因此它可以包含任何有效或无效的数字。在gcc/clang上启用编译器警告、
-Wall-Wextra-pedantic
,或在VS上启用/W3
(其他编译器的检查选项都将具有类似功能)数组未初始化,因此它可以包含任何有效或无效的数字。启用编译器警告,gcc/clang上的-Wall-Wextra-pedantic
,或VS上的/W3
(检查其他编译器的选项——所有编译器都将具有类似的选项),如果我只指定一个值,就像您在这里所做的那样,它会被分配给数组中的所有元素吗?如果我只想初始化第一个元素的值怎么办?@bartekw2213只需在下一行使用yearsAvg[0]=0.0
,然后删除={0.0}
。请参阅。@bartekw2213如果初始化数组的任何部分,那么它将初始化整个数组-这就是语言的工作方式。请记住,数组的其余部分是用0初始化的。Sofloat yearsAvg[5]={1}例如,code>将为您提供一个数组,其中包含{1,0,0,0}
@Kevin yes。但是,在C++的情况下,这是有效的,因为它支持这样的初始化。如果我只指定一个值,那么它会被分配给数组中的所有元素吗?如果我只想初始化第一个元素的值怎么办?@bartekw2213只需在下一行使用yearsAvg[0]=0.0
,然后删除={0.0}
。请参阅。@bartekw2213如果初始化数组的任何部分,那么它将初始化整个数组-这就是语言的工作方式。请记住,数组的其余部分是用0初始化的。Sofloat yearsAvg[5]={1}例如,code>将为您提供一个数组,其中包含{1,0,0,0}
@Kevin yes。但是,在C++的情况下,这是有效的,因为它支持这种初始化。