我所知道的结构体

来源:互联网 发布:php一句话木马下载 编辑:程序博客网 时间:2024/06/06 18:11

结构体struct

 

概念:可存储多种数据类型的用户自定义结构。


结构体定义格式

struct TypeName{Type1 name1;Type2 name2;……TypeN nameN;};


结构体的声明定义分有两种:

外部声明和局部声明,后者是指在任一函数体内部(常为main()函数)定义的结构体,且只能在该函数内部使用(作用域),而前者是独立于任何函数之外的,可在任一程序位置使用。


创建变量

TypeName XXX;

也可以在定义结构体的同时,于右花括号和分号之间声明变量,此方式常用于声明结构数组。


访问成员

通过 成员运算符“·”访问,

如: XXX.name1

对了, 访问类成员函数的方式(如cin.get())就是 从结构体访问方式衍生出来的。



初始化

一、在结构体定义的时候,不能存在初始化的行为,因为 未分配有内存空间,还没地址呢。

二、有三种常见的初始化办法:

I 直接访问单个成员数据并赋值,如XXX.name1 =;

II 通过 花括号实现整体赋值,如 TypeName XXX = { …,…,…}


C++11 之后的版本还支持 把 赋值运算符“=”省略,且大括号内若是不包含任何数值,则默认全初始化为0,各个字节都赋值为0

III 编译器会自动为 结构体 生成 一个赋值运算符重载函数,故

可以通过 赋值运算符=”使用一个已有的结构来初始化另一个同类型的结构体。




常见应用


结构数组——元素是同类型的结构体的数组,常用于表示具有相同性质的一个群体。

创建办法—— TypeName ArrayName [SIZE];

 


结构指针——指向结构变量的指针,存放的是结构变量的内存地址。

创建办法—— TypeName* PointName;

说明一点差异,变量是通过成员运算符“·”访问结构的成员数据的,而要是想通过指针访问到成员数据,则是通过 “指针->成员变量名;”实现的,如“PointName -> name1;”。

或者 也可以这样: “(*指针)·成员变量名”,如“(*PointName )·name1;”。

当然了,结构指针也是可以直接指向 结构数组的,这是只需要指向数组首地址即可。这就是所谓的 数组指针,更复杂的还有指针数组

 


拓展说明

结构体在作为函数参数调用时,要使用 引用传递;别通过值传递增大开销,影响很大的。

结构指针常见于 链表、树等数据结构的实现上。

还有一个知识点,就是 结构体常用于实现 位字段,在低级编程中。




待更,持续更新中……

原创粉丝点击