【1】结构体的基本功
注意结构体里面可以有很多东西,可以结构体里面包含结构体
#include<iostream> using namespace std; struct Date { int month; int day; int year; }; struct Student { int num; char name[20]; char sex; Date birthday; float score; }student1,student2= {1002,"wangli",'f',5,23,1982,89.5}; int main() { student1 = student2; cout<<student1.num<<endl; cout<<student1.name<<endl; cout<<student1.sex<<endl; cout<<student1.birthday.month<<endl; cout <<student1.birthday.year<<endl; cout<<student1.score<<endl; return 0; }
【2】结构体数组的应用
例7.2 对候选人得票的统计程序。设有3个候选人,
最终只能有1人当选为领导。今有10个人参加投
票,从键盘先后输入这10个人所投的候选人的名
字,要求最后输出这3个候选人的得票结果。
#include<iostream> #include<string.h> using namespace std; struct Person { char name[20]; int count; }; int main() { Person leader[3] = {"li",0,"zhang",0,"fun",0}; int i,j; char leader_name[20]; for(i = 0;i<10;i++) { cin>>leader_name; for(j=0;j<3;j++) { if(strcmp(leader_name,leader[j].name)==0) leader[j].count++; } cout<<endl; } for(i=0;i<3;i++) { cout<<leader[i].name<<":"<<leader[i].count<<endl; } return 0; }
用7.1.7 动态分配和撤销内存的运算符new delete
#include<iostream> #include<string> using namespace std; struct Student { string name; int num; char sex; }; int main() { Student *p; p = new Student;//用new开辟一个存放Student型的数据空间 p->name = "wang Fun"; p->num = 10123; p->sex = 'm'; cout<<p->name<<endl<<p->num<<endl<<p->sex<<endl; delete p;//撤销该空间 return 0; }
【3】共用体的几个特点:
(1) 使用共用体变量的目的是希望用同一个内存段
存放几种不同类型的数据。但请注意: 在每一瞬
时只能存放其中一种,而不是同时存放几种。
(2) 能够访问的是共用体变量中最后一次被赋值的
成员,在对一个新的成员赋值后原有的成员就失去
作用。
(3) 共用体变量的地址和它的各成员的地址都是同
一地址。
(4) 不能对共用体变量名赋值;不能企图引用变量
名来得到一个值;不能在定义共用体变量时对它初
始化;不能用共用体变量名作为函数参数。
例7.7 设有若干个人员的数据,其中有学生和教师。
学生的数据中包括: 姓名、号码、性别、职业、
年级。教师的数据包括: 姓名、号码、性别、职
业、职务。可以看出,学生和教师所包含的数据是
不同的。现要求把它们放在同一表格中,见图7.13
#include<iostream> #include<string> #include<iomanip> using namespace std; struct { int num; char name[10]; char sex; char job; union P { int grade; char position[10]; }category; }person[2]; int main() { int i; for(i=0;i<2;i++) { cin>> person[i].num>>person[i].name>>person[i].sex>>person[i].job; if(person[i].job == 's') { cin>>person[i].category.grade; } else { cin>>person[i].category.position; } } cout<<endl<<"NO. name sex job grade/person"<<endl; for(i =0;i<2;i++) { if(person[i].job == 's') { cout<< person[i].num<<setw(6)<<person[i].name<<" "<<person[i].sex<<" "<<person[i].job<<setw(10)<<person[i].category.grade<<endl; } else { cout<<person[i].num<<setw(6)<<person[i].name<<" "<<person[i].sex<<" "<<person[i].job<<setw(10)<<person[i].category.position<<endl; } } return 0; }
【4】typedef的使用规则
(1) typedef
typedef可以声明各种类型名,但不能用来定义
typedef变量。用typedef可以声明数组类型、字符串类型,
使用比较方便。
(2) 用typedef只是对已经存在的类型增加一个类型
名,而没有创造新的类型。
(3) 当在不同源文件中用到同一类型数据(尤其是
像数组、指针、结构体、共用体等类型数据)时,
常用typedef声明一些数据类型,把它们单独放在一
个头文件中,然后在需要用到它们的文件中用#
include命令把它们包含进来,以提高编程效率。
(4) 使用typedef有利于程序的通用与移植。有时程
序会依赖于硬件特性,用typedef便于移植