结构体的初始化及赋值 - 结构体的定义、初始化和赋值,结构体初始化

 结构体初始化

 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;

 }

 注意

 当你的结构体变量中有存放多个字符的成员,建议你将它定义为数组(比如前面的姓名成员,不知道数组该开辟多大时,也可以定义为指针)。原因是指针变量不能存放实际数据,仅仅是地址。

相关推荐

相关文章