假设有一个结构如:
struct XYZ
{
double a;
double b;
}
现在我们制作一个对象
struct XYZ abcd[10];
现在我正在填充这个数组。
我必须初始化这个数组,因为我在循环中调用它并覆盖以前的值。
如果它将之前的5个值覆盖了4个新值,那么数组中仍然存在第5个值,导致输出错误。
答案 0 :(得分:3)
如果你使用c ++,你可以定义一个构造函数,观察:
struct XYX {
double a, b;
XYX() { a=0; b=0; }
}
答案 1 :(得分:3)
通过在花括号内枚举它的成员值,可以轻松地初始化结构。但要注意,'如果枚举中省略了成员,则会将其视为零。
struct A { int a_, b_; };
A a = { 1, 2 };
A b = { 1 }; // will result in a_=1 and b_=0
A as [] = { {1,2}, {1,3}, {2,5} };
奇怪的是,这也适用于“聚合”类的公共成员。但是,这是令人气馁的,因为这样你的班级就会失去它在施工时做必要事情的能力,有效地将它减少到一个结构。
答案 2 :(得分:1)
for (int i=0; i<10; ++i)
{
abcd[i].a = 0.0;
abcd[i].b = 0.0;
}
当然,如果某些广告位尚未填充有意义的数据,那么您可能不应该首先在中查找。
答案 3 :(得分:1)
如果您的问题是如何初始化数组元素,那么@cemkalyoncu的答案将对您有所帮助。
如果超过之前的5个值 通过4个新值然后仍然是第5个值 仍然在阵列里面 结果给出错误的输出。
对于这种情况,你最好去矢量。 您可以从向量中删除不需要的元素,以确保它不包含错误的值。
在这种情况下,如果您不再使用,请从矢量中删除第5个元素。
答案 4 :(得分:0)
除了xtofl的答案,请注意,如果你想对数组进行零初始化,你所要做的就是写
XYZ abcd[10] = {};
答案 5 :(得分:-3)
您也可以使用memset函数初始化
memset(&abcd[index], 0, sizeof(XYZ));