C++中,允许在一个组合项中,包含若干个类型不同的数据项,称为结构体
例如:
struct Student // struct:关键字 Student:结构体类型名
{
// num, name[20], sex...:成员名
int num;
char name[20];
char sex;
int age;
float score;
char addr[30];
}student1, student2; // 结构体变量名
【注】结构体中的成员,也可以是一个结构体变量
定义结构体变量的2种方法:
(1)先声明结构体类型,再定义变量
Student student1, student2;
(2)在声明类型的同时定义变量
形如上面定义结构体Student时的格式
结构体变量的初始化
(1)采取声明类型与定义变量分开的形式
Student student1 = {10001, "Zhang San", 'M', 19, 90.5, "Shanghai"};
(2)采取在结构体变量定义时指定初始值的方式
struct Student
{
int num;
char name[20];
char sex;
int age;
float score;
char addr[30];
}student1 = {10001, "Zhang San", 'M', 19, 90.5, "Shanghai"};
①可以将一个结构体变量的值,赋给另一个具有相同结构的结构体变量
student1 = student2;
②可以引用一个结构体变量中的一个成员的值
格式:结构体变量名.成员名
结构体数组:每个数组元素都是一个结构体类型的数据,都分别包括若干成员项
#include <iostream>
#include <cstring>
using namespace std;
struct Person
{
char name[20];
int count;
};
int main()
{
// 定义Person类型的数组,数组中每个元素都是一个结构体
// 内容为3个候选人的姓名与当前的得票数
Person leader[3] = {"Li", 0, "Zhang", 0, "Sun", 0};
string leader_name; // leader_name为投票人所选的人的姓名
int num; cin >> num; // 定义要输入的名字的个数
for(int i = 0; i < num; i++)
{
cin >> leader_name; // 先后输入10张票上所写的姓名
for(int j = 0; j < 3; j++)
{
if(leader_name == leader[j].name) // 如果两个名字相同,就加1票
{
leader[j].count++;
}
}
}
for(int i = 0; i < 3; i++)
{
cout << leader[i].name << ":" << leader[i].count << endl;
}
return 0;
}
指向结构体变量的指针
#include <iostream>
using namespace std;
struct Student
{
int num;
string name;
char sex;
float score;
};
Student stu;
int main()
{
Student *p = &stu; // 定义指针p为指向Student类型数据的指针变量,并将其指向结构体变量stu
stu.num = 10301;
stu.name = "Zhang San";
stu.sex = 'm';
stu.score = 89.5;
cout << (*p).num << " " << (*p).name << " " << (*p).sex << " " << (*p).score << endl;
return 0;
}