博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
c语言结构体初始化及赋值,结构体的定义、初始化和赋值
阅读量:6503 次
发布时间:2019-06-24

本文共 2265 字,大约阅读时间需要 7 分钟。

结构体初始化

fd0ffb73d104545baaf9686bb8987e08.png

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;

}

注意

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

转载地址:http://zelyo.baihongyu.com/

你可能感兴趣的文章
UnitOfWork以及其在ABP中的应用
查看>>
学习C语言必须知道的理论知识(第一章)
查看>>
for语句内嵌例题与个人理解
查看>>
眠眠interview Question
查看>>
[转]CSS hack大全&详解
查看>>
RPC-client异步收发核心细节?
查看>>
#define WIN32_LEAN_AND_MEAN 的作用
查看>>
仿余额宝数字跳动效果 TextCounter
查看>>
简化代码的微小修改
查看>>
你必须知道的.net学习总结
查看>>
Axure8.0 网页 or App 鼠标滚动效果
查看>>
文件操作示例脚本 tcl
查看>>
大家好,新年快乐。
查看>>
prototype
查看>>
Android学习路线
查看>>
Linux下的redis的持久化,主从同步及哨兵
查看>>
在相同的主机上创建一个duplicate数据库
查看>>
Date15
查看>>
从Date类型转为中文字符串
查看>>
基于multisim的fm调制解调_苹果开始自研蜂窝网调制解调器 最快2024年能用上?
查看>>