#include<cstdio>
#include<algorithm>
#include<string>
#include<iostream>
using namespace std;
int main()
{
//结构体是一种自定义数据类型。它像是一个“套餐”,
//把各种数据类型变量捆成一个包,构成一个新的数据类型。
//结构体让一些数据处理的编程更高效,更自然。CSP、NOI中也会经常用到。
//本次讲解的是结构体的定义,使用和特性。
//1.定义结构体类型
//格式 1 ,使用struct关键字定义结构体类型:
//struct 结构类型名{
// 变量类型 成员变量 1 ;
// 变量类型 成员变量 2 ;
// ......
//};(要有分号)
//例:
struct stru{
int i; // 定义一个名字为stru的结构类型,有一个int类型的成员变量i , char类型的成员变量ch, double类型的成员变量dou
char ch;
double dou;
};
//格式 2 ,使用typedef为将定义的struct类型取多个别名:
//typedef struct{
// 变量类型 成员变量1;
// 变量类型 成员变量2;
// ......
//}结构类型名 1 ,结构类型名 2 ......;
//例:
typedef struct{
int i; // 定义一个有 一个int类型的成员变量i , char类型的成员变量ch, double类型的成员变量dou 的结构类型,并赋予其 2 个名字 :stru1 和 stru2
char ch;
double dou;
}stru1,stru2;
//(Note)结构体成员可以是任意类型,甚至可以是结构
//例:
struct taowa{
int num;
stru s;
};
//2.定义结构体变量
//光有类型还不够,定义了变量才能真正使用结构变量
//格式 1 ,定义结构体类型时直接声明(typedef不行,它是取别名用的):
//struct 结构类型名{
// 变量类型 成员变量 1 ;
// 变量类型 成员变量 2 ;
// ......
//}结构变量 1 ,结构变量 2 ......;
//例:
struct OIer{
string name; // 定义一个名字为OIer的结构类型,在定义的同时声明结构变量 chaye
char grade;
int score;
}chaye;
//格式 2 ,使用结构体类型定义变量 :
//已定义的结构类型名 结构变量名
//例:
OIer zhouyanchen; // 使用OIer结构类型定义结构变量 zhouyanchen
//格式 3 ,直接定义结构体变量 :
//struct{
// 变量类型 成员变量 1 ;
// 变量类型 成员变量 2 ;
// ......
//}结构变量 1 ,结构变量 2 ......;
//例:
struct{
string name; // 定义一个结构变量 npr
char grade;
int score;
}npr;
//3.初始化结构变量(只能在定义时进行)
// 结构变量={值 1 ,值 2 ......};
//大括号中的值会按成员定义的顺序赋值
//例:
OIer liuyunze={"liuyunze",'C',300}; //将结构变量liuyunze的成员分别赋值为 "liuyunze",'C',300
cout<<liuyunze.name<<' '<<liuyunze.grade<<' '<<liuyunze.score<<endl;
system("pause");
//4.访问结构变量的成员变量
// 结构变量名.成员变量名
//结构变量的成员变量可以当普通变量使用
//例:
chaye.name="kongxiangtai"; //将结构变量chaye的name成员分别赋值为 "kongxiangtai"
chaye.grade='C'; //将结构变量chaye的grade成员分别赋值为 'C'
chaye.score=500; //将结构变量chaye的score成员分别赋值为 500
cout<<chaye.name<<' '<<chaye.grade<<' '<<chaye.score<<endl;
system("pause");
//对于“套娃型” 结构变量,访问“层层嵌套的”成员,需要连续使用 . 运算符
//例:
taowa t; //定义前面的“套娃型 ”结构变量
t.s.ch='H'; //访问“层层嵌套的”成员c
cout<<t.s.ch<<endl;
system("pause");
//对于结构指针变量,访问指向的成员,需要使用 -> 运算符
//例:
stru *p=new stru; //定义结构指针变量并申请动态内存
p->ch='P';
cout<<p->ch<<endl;
system("pause");
return 0;
}