1. 如何引用结构体变量
(1)两个相同结构的结构体变量之间可以赋值。其隐藏了其中所有变量的赋值。
补充:声明结构体变量在main函数之前
(2)引用结构体变量的一般形式:
student1.num=1000;
"."是一个运算符。其优先级最高,作用是读取对象里的数据成员。
2. 结构体数组
Person [3]={11,12,21,22}
其实质是多个结构体变量组成的数组,每一个结构体变量又包含许多个成员项。(联想表格)
name | score | |
num 1 | ||
num 2 |
3. 指向结构体变量的指针
第一步 定义
Student stu;
Student *p=&stu;
先给student这种类型的变量(即各成员)一个统一的名字stu。可以理解为Student的小名。(这一步一般在main函数中,也可在声明结构体变量之后)
给结构体变量一个指针,其指向这种变量中各类值。
第二步 如何输出指针所指的值?
注意这三种类型等价:
1 结构体变量.成员名
2.(*p).成员名
3. p->成员名
”->"是指向运算符,和“."类比
p->n++;
++p>n;
注意这两各运算过程的区别
前者:先得n,用过后加1
后者: 先得n,加1后再用
4. 结构体类型数据做函数参数
三种用法
(1) 用结构体变量名做参数
void print (Student stu);
(2)用指向结构体变量的指针做实参
void print(Student *);
Student *p=&stu;
print (p);
(3)用结构体变量的引用做函数参数。
(注意:别名实质是两个变量共用一个地址,且一般对象用指针,数据容器用引用)
&后面的名就是数据别名,引用本质还是指针,就是给这个指针开个空间,给这个空间一个名字,就是别名。 它的优点在于可以实现指针所指向值随引用的值的变化而同步变化,不必将指针值进行传回。这可以理解为将指针数据量化。
这是函数参数不是指针,而是引用
void Student (Student &);
......
void print (Student &stud)
这时输出stud中成员的值就是输出 Student中成员的值,stud就是引用。
5. 两种动态分配空间的语法:
new: 作用是开一个空间,并给这个空间一个地址,可做指针变量的值。
new int;
new int (100);
int *p=new int (100);
new char[10];
new NULL;
第一种就是开了个空间,注意,这个空间只能通过指针访问。
第2种在这个空间中存了一个值:100 ,
第四种就是开了一个能存十个数的数组空间
但要注意,new不能同时分分配二维数组。
若内存不够,new就会返回一个空指针NULL。
delate :撤销存储空间或撤销指针
delate p;
若撤销的是一个存了数组的空间,在delate 后加[ ]
delate [ ] p;
两者结合:给地址,这个地址类型假设是结构体数组,开空间,(填入地址),填地址指向结构体变量各成员值,输出,撤销空间。
6. 共用体:几个不同类型的变量共用一个空间。用union表示,但不能引用共用体变量,只能引用共用体变量成员。
7.枚举类型 enum
把一个变量的所有可能值列举出来,变量的值在列举出来的值范围内。
enum 枚举类型名 {枚举常量表} 声明
枚举类型名(1)=1对应的枚举常量
先列出枚举的常量(也叫枚举常量),再定义枚举的变量,变量的范围就是枚举常量的所有值。
计算机会将枚举的常量赋值,因此不能用赋值语句对枚举常量赋值。通常赋值顺序为0,1,2,3.......
因此输出枚举常量就是输出计算机赋给枚举常量的值。在枚举时也可以自己制定枚举常量的值
enum weekday {sun=7,mon=1,.....}
枚举的变量只能等于枚举常量,并不等于枚举常量背后的值,因为不属于一个类型。在这时可强制转换
workday=weekday(2)
将值为2的枚举元素赋给workday.
8. typefde
就是声明一个新的类型名来代替已有类型名。
typedef int INT;
之后用INT就是用int。
注意:
int
typedef int NUM[100];
第二行是对int的扩容,扩为可含100个数据的数组。
9. 两种链表:
(1)静态链表:用结构体变量和指向结构体变量的指针构成的链表。
头指针:head,它存放一个地址这个地址指向第一个元素的第一部分。
结点:包含用户需要的数据和下一个结点的地址
头指针-> 数据->指针-> 数据->指针-> 数据...
离得近代表在一个结点。
最后表尾的指针用NULL。
其实就是将数据间通过指针进行连接。
如何构建链表?
在结构体变量中
加一个next的指针,这个指针指向结构体变量。
head=&a;
a.next=&b;
b.next=&c;
c.next=NULL;
结构类似多元函数求导的链式法则。
(2)动态链表:各结点可以随时插入或删除,且只能通过上一个结点找到下一个结点的地址。用new和delate 构建。
10.输出数表的结果 用两组switch