结构体初始化为0,c++结构体初始化
结构可以自由组装数据,这是一种非常常见的数据打包方法。当我们定义一个结构,在没有初始化的情况下使用它,就会使用垃圾数据,这种错误很难发现。我们最好先初始化任何定义好的变量。
除了使用memset和ZeroMemory,有没有更简单的初始化方式?因为有时候每定义一个结构就要用一次memset,会很繁琐。
我在这里总结三种方法。有什么好的方法,不妨补充一下。
1.在结构的构造函数中初始化。
2.继承模板类初始化
3.定义时初始化。
在C中,结构和类在使用上没有本质区别,可以用构造函数初始化。代码如下:
结构研究
{
intnNum
boolbSex
charszName[20];
charszEmail[100];
//构造函数初始化
斯图()
{
nNum=0;
bSex=false
memset(szName,0,sizeof(SZ name));
memset(szEmail,0,sizeof(szEmail));
}
};
你可能已经发现,如果结构中的成员数量很大,那么逐个赋值是相当麻烦的。那你可以这样写:
结构研究
{
intnNum
boolbSex
charszName[20];
charszEmail[100];
//构造函数初始化
斯图()
{
memset(this,0,sizeof(Stu));
//或以下格式
//memset( nNum,0,sizeof(Stu));
}
};
如果在结构中分配了一个指向堆内存的指针,那么在析构函数中释放它。以上是在构造函数中初始化的。
2.继承模板类初始化
首先,定义一个模板基类:
模板类型名称
classZeroStruct
{
公共:
ZeroStruct()
{
memset(this,0,sizeof(T));
}
};
所有定义的结构都是从这个模板类继承的。
结构图:零结构图
{
intnNum
boolbSex
charszName[20];
charszEmail[100];
};
这也支持初始化。
3.定义时初始化。
结构图
{
intnNum
boolbSex
charszName[20];
charszEmail[100];
};
//定义时初始化
stu stu 1={ 0 };
在某些结构中,第一个成员指示结构的大小,因此它可以这样初始化:
结构研究
{
int nSize//结构大小
intnNum
boolbSex
charszName[20];
charszEmail[100];
};
Stu stu1={sizeof(Stu),0 };
后面的0可以省略,直接写成:stu stu 1={ sizeof(stu)};它将自动填充0。
总结:
以上三种方法是我所知道的初始化结构的方法。
前两个,其实已经有了分类结构,类似于类的使用。三是纯结构的写作。
如果目的仅限于结构,我建议不要添加构造函数或者从那个模板类继承,因为这个时候结构其实就是一个类。当定义一个结构时,不可能用第三种方式初始化它。当然,这个时候不需要初始化。
看看微软定义的结构。基本上,没有构造函数和析构函数。因为结构的意思很明确,就是一包数据而已。如果增加了方法,它的意义就会改变。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。