20260306-入门班-结构体专题
已结束
IOI
开始于: 2026-3-6 15:30
165
小时
主持人:
57
结构体
在处理数据的过程中,有时候需要储存多种多样的信息。比如一位学生,他有姓名,年龄,学号等等。然而数组只能储存同一种类型的信息,比如int、char、string...
C++结构体是一系列具有相同类型或不同类型的数据构成的数据集合。
struct 类型名 {
数据类型1 成员变量1;
数据类型1 成员变量1;
}[结构体变量名];
struct 已定义的类型名 结构体变量名;
变量
变量的作用域
#include<bits/stdc++.h>
using namespace std;
int mx;
void f(int a[],int m){
int mx=0;
for(int i=1;i<=m;i++){
if(a[i]>=mx) mx=a[i];
}
}
int main(){
int m;cin>>m;
int b[100];
for(int i=1;i<=m;i++){
cin>>b[i];
}
}
在f(int a[],int m)函数中,int a[]是指可以接收一个int类型的数组名,可以传入一整个数组。
a在函数中,就是b的别名。改变了a中的内容,b中的内容也会变。
在f函数中使用的a,就是传入的b数组。b数组在main函数里定义,b数组是一个局部变量,以下的代码无法运行,因为b数组在main中定义,只能在main中使用这个b数组。main函数的范围被称为 b数组变量的作用域。
局部变量的作用域通常可以看成所在的函数内,即:只能在大括号内使用。
void f(int m){
int mx=0;
for(int i=1;i<=m;i++) if(b[i]>=mx)mx=a[i];
}
int main(){
int m;cin>>m;
int b[100];
for(...省略...)
}
在刚刚的代码中,mx也是一个很特殊的变量,它在全局定义过一遍,但是在f函数中又被定义了一遍。这样的情况,在f函数里变化的mx,在全局变量mx中并不会变化,不管如何执行,mx在main中被引用时仍然为0,在编写代码的过程中,这是很容易发生的问题。
在算法竞赛中,推荐数组非必要均定义为全局变量,方便引用与修改。
在结构体中,成员变量均只能通过结构体名引用,需要使用结构体名.变量名来引用。可以看成一种全局变量。
函数
结构体也有对应的函数
struct 结构体名{
返回值 函数名(参数1,参数2){
函数主体
返回值
}
};
比如
struct student{
string name;
int chinese,math,english;
int getSorce(){
return this.chinese+this.math+this.english;
}
}a;
在上述代码中,我们定义了一个叫getSorce的函数,它是结构体student的函数,调用时必须使用结构体名student.getSorce()。
int main(){
cout<<a.getSorce();
}
在定义函数的时候,我们要区别全局变量和结构体内的变量。结构体内的变量使用this引用。
- 状态
- 已结束
- 规则
- IOI
- 题目
- 6
- 开始于
- 2026-3-6 15:30
- 结束于
- 2026-3-13 12:30
- 持续时间
- 165 小时
- 主持人
- 参赛人数
- 57