本文主要是谭浩强老师c++教材第三版第七章的小结。
1.结构体的定义及初始化
定义结构体的目的是反映数据之间的内在联系。
声明结构体的一般形式为:
struct 结构体类型名
{成员表}
其中,成员表由每个成员的类型名+成员名构成。
定义结构体有以下三种方法:
(1)先声明结构体类型再定义变量
如:
struct student
{
int num;
char name[20];
float score[10];
};
student student1,student2;
(2)在声明类型的同时定义变量
struct student
{
int num;
char name[20];
float score[10];
}student1,student2;
实际应用中,较为提倡第一种方法,因为将声明和定义分开便于使不同的函数甚至文件可以使用相同的结构体,适用于大规模编程。
结构体变量的初始化:
对于上述两种定义形式,均可在其后增加初始化,给变量赋予初始值。
2. 引用结构体变量
(1)可以将一个结构体变量的值赋给另一个具有相同结构的结构体变量,如:
student1 = student2;
(2)可以引用结构体变量中一个成员的值,一般形式为:
结构体变量名.成员名
如:student.num
3. 结构体数组
结构体数组是每个数组元素都是一个结构体的数组,也就是说是一组结构体。
如:
struct Person
{
char name[20];
int count;
};
int main()
{
Person leader[3] = {"li",0,"zhang",0,"sun",0};
//定义了类型为Person的数组,每个元素都是一个姓名+得票数的结构体
}
4. 指向结构体变量的指针
(1)通过指向结构体变量的指针引用结构体变量中的成员
struct student
{
int num;
char name;
float score;
};
int main()
{
student stu;
student *p = &stu; //定义p为指向student类型的指针,并指向stu
cin >> stu.num;
cin >>(*p).num;
cin >> p->num; //以上三种表达方式等价
}
p->num与(*p).num等价
(2)用结构体变量和指向结构体变量的指针构成链表
详情见习题6-10:https://blog.csdn.net/zl3090/article/details/86600361
5. 结构体类型数据作函数参数
(1)结构体变量名作函数参数
struct student
{
int num;
char name;
float score;
};
int main()
{
void print(student);//里边是类型名
student stu;
print(stu);
}
void print(student stu)
{
}
(2)用指向结构体变量的指针作函数参数
struct student
{
int num;
char name;
float score;
};
int main()
{
void print(student *);
student *pt = &stu;
print(pt);
}
void print(student *p)
{
}
6. 用new和delete运算符进行动态分配和撤销存储空间
new和delete是运算符,不是函数,因此执行效率高。
new的使用格式为:
new 类型[初值]
如:new int(100);//开辟存放整数的空间,并指定该整数的初值为100,返回一个指向该存储空间的地址;
float *p = new float(3.14);//开辟一个存放浮点数的空间,指定初值为3.14,并返回该空间的地址赋给p;
delete的使用格式:
对变量:delete 指针变量
对数组:delete [] 指针变量
如:要撤销上面存放单精度浮点数的空间p:
delete p;
7.枚举类型
如果一个变量只能有几种可能的值,则可以定义为枚举类型,即将变量的值一一列出来,变量的值只能在列举出来的范围内
声明枚举类型的一般形式为:
enum 枚举类型名 {枚举常量表};
如:enum weekday {mon,tue,wed,thu,fri};
定义枚举类型:weekday workday;
将枚举元素赋给其他元素:w = workday(2);//运行结果w = tue
注意的是枚举元素是常量而不是变量。
8. 用typedef声明新的类型名
可以用typedef声明新的类型名代替已有的类型名,
格式: typedef 原类型名 新类型名
如:typedef int INTEGER; //用INTEGER代替int;
由此,以下两行等价:
int i,j;
INTEGER i,j;
也可以用于代表指定结构体,如:
typedef struct
{
int month;
int day;
int year;
}DATE;
//用DATE代表该结构体,以下可以直接定义不同类型的该结构体
DATE birthday;
DATE *p;