场景是我有嵌套的结构定义,我有一个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];
我知道使用零循环初始化每个结构元素的冗长方法,但我正在寻找一种将所有元素初始化为零的简短方法。或者什么是结构数组的默认初始化值(仅包含浮点数),它是零还是任意随机值?
答案 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));
`