【918C++程序设计】6、自定义数据类型

6.1 结构体

为什么用结构体

在一个组合项中包含若干个类型不同(或相同)的数据项。
形式:
struct 结构体类型名
{成员表};

每一个成员也称为结构体中的一个域(field),成员表又称为域表。

结构体的定义及其初始化

定义方法:
(1)先声明结构体类型再定义变量

struct Student{
.....
};
Student student1,student2;

(2)在声明类型的同时定义变量

struct Student{
.....
}student1,student2;

初始化:
(1)在定义时指定初始值

struct Student{
.....
}student1={...};

(2)声明类型和定义变量分开

struct Student{
.....
};
Student student1={...};

引用结构体变量

形式
结构体变量名.成员名
“.”是成员运算符,优先级最高

结构体数组

每一个数组元素都是一个结构体类型的数据

指向结构体变量的指针

一个结构体变量的指针就是该变量所占据的内存段的起始地址
1、通过指向结构体变量的指针引用结构体变量中的成员

Student stu;
Student *p=&stu;

结构体变量名.成员名 =*p).成员名 = p->成员名

2、用结构体变量和指向结构体变量的指针构成链表 (链表详见6.3)
链表中的每一个元素称为“结点”,每个结点都包括两个部分:用户需要的实际数据,下一个结点的地址。
最后一个元素不再指向其他元素,它的地址部分放一个“NULL”

结构体类型数据作为函数参数

(1)用结构体变量名做参数
(2)用指向结构体变量的指针作实参,将结构体变量的地址传给形参
(3)用结构体变量的引用作函数形参,它就成为实参的别名

6.2 动态内存分配

用new和delete运算符进行动态分配和撤销存储空间

new和delete是运算符,不是函数,因此执行率高。

new 类型 [初值]

new int;//存放整数的空间,返回一个指向该存储空间的地址(指针)
new int(100);//存放整数的空间,指定该整数初值为100,返回一个指向该存储空间的地址(指针)
new char[10];//存放字符数组(包括10个元素)的空间,返回首元素地址
new int[5][4];//存放二维数组的空间,返回首元素地址new分配数组时不能指定初值
float *p = new float(3.14);//将返回的该空间的地址赋给指针变量p

delete 指针变量(对变量)
delete [ ] 指针变量(对数组)
完整例子

int main(){
Student *p;
p = new Student;
p->name = "wang";
p->num = 10123;
cout<<p->name<<endl<<p->num<<endl;
delete p;
return 0;
}

6.3 链表与链表的基本操作

链表中的每一个元素称为“结点”,每个结点都包括两个部分:用户需要的实际数据,下一个结点的地址。
最后一个元素不再指向其他元素,它的地址部分放一个“NULL”

静态链表:所有结点都是在程序中定义的,不是临时开辟的,也不能用完后释放。各结点既可以通过上一个结点的next访问,也可以直接通过结构体变量名a,b,c访问。
动态链表:各结点是可以随时插入和删除的,这些结点并没有变量名,只能先找到上一个结点,才能找到下一个结点。只有提供头指针head的地址,才能访问整个列表。

包括静态链表的建立
动态链表的建立、插入、删除等
详见《C++程序设计题解与上机指导(第3版)》P109

6.4 枚举类型

一个变量只能有几种可能的值。
形式:
enum 枚举类型名{枚举常量表}
花括号内的内容称为枚举元素/枚举常量
声明后可用来定义变量

enum weekday{sun,mon,tue,wed,thu,fri,sat};
weelday workday,week_end;
workday=mon;
week_end=sun;

也可以在声明枚举类型的同时定义枚举变量

enum {sun,mon,tue,wed,thu,fri,sat}workday,week_end;

枚举元素作为常量,是有值的,编译系统按定义时的顺序赋值整数0,1,2…

cout<<workday;
打印为 1 

也可以在声明枚举类型时自己指定枚举元素的值

enum weekday{sun=7,mon=1,tue,wed,thu,fri,sat};
后续元素按顺序+1,sat为6

PS:不能把一个整数直接赋给一个枚举变量,只接受枚举变量类型的数据

workday = tue;
正确
workday = 2;
错误
workday = weekday(2);
先进行强制类型转换,此时正确
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值