1

我有一个结构,其中包含 3 种不同类型的值(char、float、int)......我需要在程序开始时将所有内容设置为 0。我怎么做?

4

4 回答 4

6

常用的方法有两种:

A a = A();

或者

A a = {};

第一个的优点是,如果您稍后提供构造函数,它仍然可以工作(只要您提供默认构造函数)。

关于使用memset:的建议,memset仅保证适用于整数类型。我无法想象它不适用于 a float,但正式地说,它不能保证。当然,如果您稍后修改struct,它可能会停止工作。这是一个避免的解决方案。

于 2013-02-04T10:34:02.003 回答
1
 struct A
 {
   int a;
   char b;
   float c;
 };

struct A是一个聚合的内置类型,初始化为0. 您可以通过两种方式初始化为 A:

//Class method pass to function
int main() 
{
  A a = {};      // initialize single A to 0
  A b = A();     // same effort
  A c[10] = {};  // initialize array to 0

  return 0;
}
于 2013-02-04T10:25:34.657 回答
1

有几种方法:

  1. 使用初始化器mystruct x = { '\0', 0.0f, 0 };
  2. 采用mystruct x; memset(&x, 0, sizeof(x));
  3. 编写一个将每个值设置为零的函数(或在 C++ 中为构造函数)。

一般来说,第一个是最明显的,但如果你有大量的结构,那么你可能会发现选项 2 或 3 更合适。

注意:使用memset仅在仅包含数据的数据结构上是安全的。在 C++ 中, astruct和 aclass几乎相同,并且 astruct具有成员函数,具有其他structorclass成员或从另一个classor继承struct,绝对不能安全使用memset。当然,如果您从纯数据开始struct,然后将功能添加到struct“破坏”“唯一数据”承诺的功能中,这将特别危险。

于 2013-02-04T10:27:44.280 回答
1

您可以使用构造函数来初始化所有元素。因此,您不仅可以使用 0 也可以使用其他值。

 struct A
 {
   int a;
   char b;
   float c;
   A(int _a=0,char _b=0,float _c=0.0) : a(_a), b(_b), c(_c) {}
 };

int main() 
{
  A a;
  // work with a
  return 0;
}
于 2013-02-04T10:29:37.553 回答