我有一个结构,其中包含 3 种不同类型的值(char、float、int)......我需要在程序开始时将所有内容设置为 0。我怎么做?
user2017078
问问题
238 次
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
有几种方法:
- 使用初始化器
mystruct x = { '\0', 0.0f, 0 };
- 采用
mystruct x; memset(&x, 0, sizeof(x));
- 编写一个将每个值设置为零的函数(或在 C++ 中为构造函数)。
一般来说,第一个是最明显的,但如果你有大量的结构,那么你可能会发现选项 2 或 3 更合适。
注意:使用memset
仅在仅包含数据的数据结构上是安全的。在 C++ 中, astruct
和 aclass
几乎相同,并且 astruct
具有成员函数,具有其他struct
orclass
成员或从另一个class
or继承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 回答