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

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

【918C++程序设计】6、自定义数据类型 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<name<num< 
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< 

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

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

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

workday = tue;
正确
workday = 2;
错误
workday = weekday(2);
先进行强制类型转换,此时正确

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5670846.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存