一、什么是结构体
结构体是不同类型的数据组合成一个有机整体。例如:学生的学号
、姓名、性别、成绩、地址 这些都是一个学生的属性,把这些属性组织成一个组合,组合中包含不同的数据类型,C和C++允许指定这样的数据类型,称为结构体。
struct Student //申明一个结构体类型(struct是结构体申明的关键字)
{
int num;
char name[20];
char sex;
int age;
float score;
char addr[30];
}; //最后要有分号
注:C语言中的结构体包括数据,但在C++中可以包含函数
二、结构体变量的定义方法及其初始化
1.定义结构体变量的方法
(1)先声明结构体类型在定义变量
struct Student student1,student2;//C++中可以不加关键字struct
(2)在申明类型的同时定义变量
struct Student
{
int num;
char name[20];
char sex;
int age;
float score;
char addr[30];
}student1,student2;
一般形式为:
struct 结构体名
{
成员列表
}变量名列表;
(3).直接定义结构体类型变量
三、结构体变量的初始化
struct Student
{
int num;
char name[20];
char sex;
int age;
float score;
char addr[30];
}student1 = {10001,"Zhang Xin",'M',19,90,5,"Shanghai"};yinyong
如果Student类已经声明也可以采用
Student student = {10002,"Wang Li",'F',20,98,"Bingjing"};
四、结构体变量的引用
(1).可以将一个结构体变量赋值给另一个具有相同结构的结构体变量
(2).引用结构体变量中的一个成员值:
结构体变量名.成员名;
例如:student.num = 100010;
(3).不能将一个结构体变量作为一个整体进行输入和输出,只能对各个成员进行分别输入输出
(4).结构体变量可以像普通变量一样进行运算
(5).可以引用结构体成员变量的地址,也可以引用结构体变量的地址
五、结构体数组
结构体数组的每个数组元素都是结构体类型的数据,包括各个成员项
struct Student
{
int num;
char name[20];
char sex;
int age;
float score;
char addr[30];
};
Student stu[3]; //三个结构体类型相同的同学
也可以这样定义
struct Student
{
int num;
char name[20];
char sex;
int age;
float score;
char addr[30];
}stu[3];
1、结构体类型初始化
struct Student
{
int num;
char name[20];
char sex;
int age;
float score;
char addr[30];
}stu[3] = {{ },{ },{ }};
也可以不指定元素个数:
stu[] = {{},{},{}};
也可以:Student stu[] = { {},{},{}};
六、指向结构体变量的指针
结构体变量的指针指向结构体变量的起始位置,也可以指向结构体数组中的元素
1. struct Student
{
int num;
char name[20];
char sex;
int age;
float score;
char addr[30];
}student1;
Student stu;
Student *p = &stu;
cout<<(*p)>num<<" "<<(*p).num<<endl;
*p是指向结构体Student的指针,(*p)表示指向结构体变量且由于运算符优先级不同,括号不可省略。在C++中等价于p->num;
三种表示方法等价:stu.num\(*p).num\p->num
2.用指向结构体变量的指针构成链表
struct Student
{
int num;
char name[20];
char sex;
Student * next; //next指向Student结构体变量用这个方法可以建立链表
};
例:#define NULL 0
#include <iostream>
struct Student
{
long num;
float score;
struct Student *next;
};
int main()
{
Student a,b,c,*head,*p;
a.num = 31001;a.score = 89.5; //对结构体成员赋值
b.num = 31003;b.score = 90;
c.num = 31007;c.score = 85;
head = &a; //a的起始地址赋值给head
a.next = &b; //b的起始地址赋值给a的next结点
b.next = &c;
c.next = NULL;
p = head; //p指针指向a结点
do
{
cout<<p->num<<" "<<p ->score<<endl; //输出P结点的数据成员
p = p ->next; //p指向下一结点
}while(p!= NULL);
return 0;
}
七、结构体类型作为函数参数
(1).结构体名作为参数:
struct Student
{
long num;
float score;
struct Student *next;
};
void print(Student);
(2).指向结构体变量的指针做实参
struct Student
{
long num;
float score;
struct Student *next;
}stu{123456,"Li",65.5,89,78.5};
void print(Student *); //形参为指向Student的指针变量
Student *pt = &stu;
print(pt);
(3).结构体变量引用做函数参数
struct Student
{
long num;
float score;
struct Student *next;
}stu{123456,"Li",65.5,89,78.5};
void print(Student &);
八、共用体
几个不同变量共占用同一段内存结构为共用体,共用体内存长度等于最长成员长度
union data
{
int i;
char ch;
double d;
}a,b,c;
注意:不能引用共用体变量,而只能引用共用体变量的成员:a.i 输出时:cout<<a.i;
九、枚举
一个变量只有几种可能的值,可以使用枚举:enum weekday{sun,mon,tue,wed,thu,fri,sat}; 枚举类型weekday的枚举常量
一般类型为:enum 枚举类型名{枚举常量表列};weekday workday,week_end;这样workday,week_end被定义为weekday的变量
也可以写成:enum weekday workday,week_end;
C++中也可以写成:enum{sun,mom,tue,wed,thu,fri,sat}workday,week_end;
十、用typedef声明类型
如:typedef int INTEGER;int i,j;INTEGER i,j;
typedef也可以声明结构体类型
结构体是不同类型的数据组合成一个有机整体。例如:学生的学号
、姓名、性别、成绩、地址 这些都是一个学生的属性,把这些属性组织成一个组合,组合中包含不同的数据类型,C和C++允许指定这样的数据类型,称为结构体。
struct Student //申明一个结构体类型(struct是结构体申明的关键字)
{
int num;
char name[20];
char sex;
int age;
float score;
char addr[30];
}; //最后要有分号
申明结构体类型的形式:
struct 结构体类型名
{成员列表};注:C语言中的结构体包括数据,但在C++中可以包含函数
二、结构体变量的定义方法及其初始化
1.定义结构体变量的方法
(1)先声明结构体类型在定义变量
struct Student student1,student2;//C++中可以不加关键字struct
(2)在申明类型的同时定义变量
struct Student
{
int num;
char name[20];
char sex;
int age;
float score;
char addr[30];
}student1,student2;
一般形式为:
struct 结构体名
{
成员列表
}变量名列表;
(3).直接定义结构体类型变量
三、结构体变量的初始化
struct Student
{
int num;
char name[20];
char sex;
int age;
float score;
char addr[30];
}student1 = {10001,"Zhang Xin",'M',19,90,5,"Shanghai"};yinyong
如果Student类已经声明也可以采用
Student student = {10002,"Wang Li",'F',20,98,"Bingjing"};
四、结构体变量的引用
(1).可以将一个结构体变量赋值给另一个具有相同结构的结构体变量
(2).引用结构体变量中的一个成员值:
结构体变量名.成员名;
例如:student.num = 100010;
(3).不能将一个结构体变量作为一个整体进行输入和输出,只能对各个成员进行分别输入输出
(4).结构体变量可以像普通变量一样进行运算
(5).可以引用结构体成员变量的地址,也可以引用结构体变量的地址
五、结构体数组
结构体数组的每个数组元素都是结构体类型的数据,包括各个成员项
struct Student
{
int num;
char name[20];
char sex;
int age;
float score;
char addr[30];
};
Student stu[3]; //三个结构体类型相同的同学
也可以这样定义
struct Student
{
int num;
char name[20];
char sex;
int age;
float score;
char addr[30];
}stu[3];
1、结构体类型初始化
struct Student
{
int num;
char name[20];
char sex;
int age;
float score;
char addr[30];
}stu[3] = {{ },{ },{ }};
也可以不指定元素个数:
stu[] = {{},{},{}};
也可以:Student stu[] = { {},{},{}};
六、指向结构体变量的指针
结构体变量的指针指向结构体变量的起始位置,也可以指向结构体数组中的元素
1. struct Student
{
int num;
char name[20];
char sex;
int age;
float score;
char addr[30];
}student1;
Student stu;
Student *p = &stu;
cout<<(*p)>num<<" "<<(*p).num<<endl;
*p是指向结构体Student的指针,(*p)表示指向结构体变量且由于运算符优先级不同,括号不可省略。在C++中等价于p->num;
三种表示方法等价:stu.num\(*p).num\p->num
2.用指向结构体变量的指针构成链表
struct Student
{
int num;
char name[20];
char sex;
Student * next; //next指向Student结构体变量用这个方法可以建立链表
};
例:#define NULL 0
#include <iostream>
struct Student
{
long num;
float score;
struct Student *next;
};
int main()
{
Student a,b,c,*head,*p;
a.num = 31001;a.score = 89.5; //对结构体成员赋值
b.num = 31003;b.score = 90;
c.num = 31007;c.score = 85;
head = &a; //a的起始地址赋值给head
a.next = &b; //b的起始地址赋值给a的next结点
b.next = &c;
c.next = NULL;
p = head; //p指针指向a结点
do
{
cout<<p->num<<" "<<p ->score<<endl; //输出P结点的数据成员
p = p ->next; //p指向下一结点
}while(p!= NULL);
return 0;
}
七、结构体类型作为函数参数
(1).结构体名作为参数:
struct Student
{
long num;
float score;
struct Student *next;
};
void print(Student);
(2).指向结构体变量的指针做实参
struct Student
{
long num;
float score;
struct Student *next;
}stu{123456,"Li",65.5,89,78.5};
void print(Student *); //形参为指向Student的指针变量
Student *pt = &stu;
print(pt);
(3).结构体变量引用做函数参数
struct Student
{
long num;
float score;
struct Student *next;
}stu{123456,"Li",65.5,89,78.5};
void print(Student &);
八、共用体
几个不同变量共占用同一段内存结构为共用体,共用体内存长度等于最长成员长度
union data
{
int i;
char ch;
double d;
}a,b,c;
注意:不能引用共用体变量,而只能引用共用体变量的成员:a.i 输出时:cout<<a.i;
九、枚举
一个变量只有几种可能的值,可以使用枚举:enum weekday{sun,mon,tue,wed,thu,fri,sat}; 枚举类型weekday的枚举常量
一般类型为:enum 枚举类型名{枚举常量表列};weekday workday,week_end;这样workday,week_end被定义为weekday的变量
也可以写成:enum weekday workday,week_end;
C++中也可以写成:enum{sun,mom,tue,wed,thu,fri,sat}workday,week_end;
十、用typedef声明类型
如:typedef int INTEGER;int i,j;INTEGER i,j;
typedef也可以声明结构体类型