结构体的初始化及赋值 - 结构体的定义、初始化和赋值,结构体初始化 2023-10-18 14:08:07 0 0 结构体初始化 1、结构体的构造函数中初始化 在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)); } }; 如果在结构体中分配了指针,并且指针指向一个堆内存,那么就在析构函数中释放。以上便是在构造函数中初始化。 2、继承模板类初始化。 首先定义一个模板基类: template 《typename T》 class ZeroStruct { public: ZeroStruct() { memset(this,0,sizeof(T)); } }; 之后定义的结构体都继承于此模板类。 struct Stu:ZeroStruct《Stu》 { int nNum; bool bSex; char szName[20]; char szEmail[100]; }; 这样也能实现初始化。 3、定义时初始化。 struct Stu { int nNum; bool bSex; char szName[20]; char szEmail[100]; }; //定义时初始化 Stu stu1 = {0}; 在有的结构体中,第一个成员表示结构体的大小,那么就可以这样初始化: struct Stu { int nSize; //结构体大小 int nNum; bool bSex; char szName[20]; char szEmail[100]; }; Stu stu1 = {sizeof(Stu),0}; 后面的0,可以省略掉,直接写成:Stu stu1 = {sizeof(Stu)};后面自动会用0填充。 关于结构体的类型要注意的几点: (1)类型与变量是不同的概念,不要混淆。只能对结构体变量中的成员赋值,而不能对结构体类型赋值。 (2)对结构体变量中的成员(即“域”),可以单独使用,它的作用与地位相当于同类型的普通变量。 (3)结构体的成员也可以是一个结构体变量。 结构变量的赋值 你可对结构体变量的成员逐个赋值,这种方式和数组相像,数组就是逐个元素逐一赋值(对于数组,除非初始化,否则你别无选择,只能这样赋值)。不同于数组,标准C中结构体变量可以整体赋值。 例一: #include 《stdio.h》 int main(void) { struct student { long int num; int age; char* name; }st1={200,18,“zhangsan”}; struct student st2,st3; printf(“ NO. age name /n”); printf(“ %ld %d %s/n”,st1.num,st1.age,st1.name); getch(); st2.num=199; st2.age=19; st2.name=“lisi”; printf(“ %ld %d %s/n”,st2.num,st2.age,st2.name); getch(); st3=st2; printf(“ %ld %d %s/n”,st3.num,st3.age,st3.name); getch(); printf(“/n/n struct student:%d”,sizeof(struct student)); getch(); return 0; } 例二: #include 《stdio.h》 #include 《conio.h》 struct birth { int year; int month; int day; }; struct student { long int num; struct birth birthday; char* name; }st1={200,{1988,8,8},“zhangsan”}; int main(void) { struct student st2; st2=st1; printf(“ %ld %s %d/n”,st2.num,st2.name,sizeof(int)); printf(“ year: %d month: %d month: %d/n”, st2.birthday.year, st2.birthday.month, st2.birthday.day); getch(); return 0; } 注意 当你的结构体变量中有存放多个字符的成员,建议你将它定义为数组(比如前面的姓名成员,不知道数组该开辟多大时,也可以定义为指针)。原因是指针变量不能存放实际数据,仅仅是地址。 收藏(0)