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