总结C++中几种结构体初始化的方法 您所在的位置:网站首页 codesys结构体数组初始化 总结C++中几种结构体初始化的方法

总结C++中几种结构体初始化的方法

2024-06-27 02:08| 来源: 网络整理| 查看: 265

结构体能自由组装数据,是一种很常见的数据打包方法。

当我们定义一个结构体后,没有初始化就使用,就会使用到垃圾数据,而且这种错误很难发现。

在编程时对于定义的任何变量,我们最好都先初始化。

除了使用memset和ZeroMemory之外,有没有更简单的方法初始化呢?

因为有时候每定义一个结构体,就使用一次memset,这样很繁琐,同时有时候也需要给结构体中的一些变量赋一些非0的默认值。

我这里总结三种方法,如果大家有什么好的方法,不妨加上去:

1、结构体的构造函数中初始化。

2、继承模板类初始化

3、定义时初始化

一、在结构体构造函数中初始化

在C++中,结构体与类在使用上已没有本质上的区别了,所以可以使用类似构造函数的形式来初始化,如下代码所示:

struct Stu { int nNum; bool bSex; char szName[20]; char szEmail[100]; //构造函数初始化 Stu() { nNum = 0; bSex = false; memset(szName,0,sizeof(szName)); memset(szEmail,0,sizeof(szEmail)); } };

你可能已经发现了,如果结构体中有大量成员,一个个赋值,相当麻烦。那么你可以这样写:

struct Stu { int nNum; bool bSex; char szName[20]; char szEmail[100]; //构造函数初始化 Stu() { memset(this,0,sizeof(Stu)); //或者是下面的格式 //memset(&nNum,0,sizeof(Stu)); } };

如果在结构体中分配了指针,并且指针指向一个堆内存,那么就在析构函数中释放,以上便是在构造函数中初始化。

二、继承模板类初始化

首先定义一个模板基类:

template class ZeroStruct { public: ZeroStruct() { memset(this,0,sizeof(T)); } };

之后定义的结构体都继承于此模板类。 

struct Stu:ZeroStruct { int nNum; bool bSex; char szName[20]; char szEmail[100]; };

这样也能实现初始化。

三、定义时初始化

struct Stu { int nNum; bool bSex; char szName[20]; char szEmail[100]; }; //定义时初始化 Stu stu1 = {0};

#include #include using namespace std; struct Stu { int nNum; bool bSex; char szName[20]; char szEmail[100]; }; struct XStu { long sum; Stu sx; Stu* sP; }; int main() { Stu ss; strcpy(ss.szName,"xx"); strcpy(ss.szEmail,"xx"); for(int i = 0; i < 100; ++i) { XStu s = {0}; //XStu s ; // cout


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有