我们如何初始化结构?

时间:2009-09-16 05:11:03

标签: c++

假设有一个结构如:

struct XYZ
{
double a;
double b;
}

现在我们制作一个对象

struct XYZ abcd[10];

现在我正在填充这个数组。

我必须初始化这个数组,因为我在循环中调用它并覆盖以前的值。

如果它将之前的5个值覆盖了4个新值,那么数组中仍然存在第5个值,导致输出错误。

6 个答案:

答案 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));