如何在C中初始化结构数组?

时间:2011-04-04 08:20:13

标签: c

场景是我有嵌套的结构定义,我有一个10个这样的结构的数组。我想要的是用零初始化父结构和子结构的每个元素。代码如下:

struct PressureValues
{

   float SetPressure;
   float ReadPressure;

};

struct CalibrationPoints
{

   float SetTemperature;
   struct PressureValues PressurePoints[10];

};

extern volatile struct  CalibrationPoints code IntakeCalibrationPoints[10];

extern volatile struct  CalibrationPoints code DischargeCalibrationPoints[10];

我知道使用零循环初始化每个结构元素的冗长方法,但我正在寻找一种将所有元素初始化为零的简短方法。或者什么是结构数组的默认初始化值(仅包含浮点数),它是零还是任意随机值?

4 个答案:

答案 0 :(得分:11)

volatile struct CalibrationPoints IntakeCalibrationPoints[10] = { { 0 } };
volatile struct CalibrationPoints DischargeCalibrationPoints[10] = { { 0 } };

这会将所有元素初始化为零。

这样做的原因是,当您明确初始化数据结构的至少一个元素时,默认情况下,所有未指定初始化器的剩余元素将初始化为零。

答案 1 :(得分:2)

首先,我认为你对'初始化'的含义有错误的概念。

您可以看到,当系统提供程序存储器时,在使用它的最后一个程序之后,它不会打扰清理。所以,你可以得到零,你可以得到看似随机的值等等。

现在,您的结构无法从随机设置的数据中受益,是吗?所以你初始化它们:你给他们的成员有意义的值,这对你的数据有意义。这可能全是零,也可能不是。 正在初始化设置有意义的默认值,可以这么说。

至于您的问题,您可以使用memset()快速清零内存。干杯!希望我帮忙。

memset()http://www.cplusplus.com/reference/clibrary/cstring/memset/

答案 2 :(得分:1)

您可以使用

memset(IntakeCalibrationPoints, 0x00, sizeof( IntakeCalibrationPoints))

例如

答案 3 :(得分:1)

你可以尝试:

struct CalibrationPoints struct;
memset ( struct, 0, sizeof(CalibrationPoints));
`