一、什么是结构数组

结构体是C语言和C++语言中的一种构造类型,结构体可以将多个不同的数据类型组合在一起成为一个新的数据类型。而结构体数组,则是将多个相同的结构体按照一定顺序存储在一起形成一个数组。

struct student{
    char name[20];
    int age;
    float score;
};

int main(){
    student s[5];
    return 0;
}

以上代码定义了一个名为student的结构体,包含了学生的姓名、年龄和分数三个属性。同时,该代码定义了一个包含5个元素的结构体数组s。

二、如何定义和初始化结构体数组

定义结构体数组和定义基本类型数组一样,需要指定数组类型、数组名和数组大小。在C++语言中,我们可以使用结构体的构造函数对结构体数组进行初始化。

struct student{
    char name[20];
    int age;
    float score;
    student(char* n, int a, float s):age(a),score(s) {
        strcpy(name,n);
    }
};

int main(){
    student s[3] = {
        student("Jack",20,95.5),
        student("Lucy",19,86.0),
        student("Tom",21,78.5)
    };
    return 0;
}

以上代码定义了一个带有构造函数的student结构体,并对一个包含3个元素的结构体数组s进行了初始化。需要注意的是,在结构体数组的初始化过程中,需要为每个元素都提供相应的初始化值。

三、如何通过索引访问结构体数组元素

结构体数组的元素访问方式和一般数组的访问方式相同,使用结构体数组名和元素索引即可访问。

struct student{
    char name[20];
    int age;
    float score;
};

int main(){
    student s[3] = {
        {"Jack",20,95.5},
        {"Lucy",19,86.0},
        {"Tom",21,78.5}
    };
    cout<<s[0].name<<" "<<s[0].age<<" "<<s[0].score<<endl;
    return 0;
}

以上代码演示了通过索引访问结构体数组元素的方法。在C++语言中,使用”.”来访问结构体成员。

四、如何遍历结构体数组

遍历结构体数组的方法和遍历一般数组的方法相同,使用循环结构即可。

struct student{
    char name[20];
    int age;
    float score;
};

int main(){
    student s[3] = {
        {"Jack",20,95.5},
        {"Lucy",19,86.0},
        {"Tom",21,78.5}
    };
    for(int i=0;i<3;i++){
        cout<<s[i].name<<" "<<s[i].age<<" "<<s[i].score<<endl;
    }
    return 0;
}

以上代码演示了结构体数组的遍历方法。

五、结构体数组作为函数参数的传递

结构体数组作为函数参数的传递方式和一般数组的传递方式相同,可以使用指针和数组名称两种方式进行传递。

struct student{
    char name[20];
    int age;
    float score;
};

void print(student* stu, int n){
    for(int i=0;i<n;i++){
        cout<<stu[i].name<<" "<<stu[i].age<<" "<<stu[i].score<<endl;
    }
}

int main(){
    student s[3] = {
        {"Jack",20,95.5},
        {"Lucy",19,86.0},
        {"Tom",21,78.5}
    };
    print(s,3);
    return 0;
}

以上代码演示了结构体数组作为函数参数传递的方法。

六、结构体数组的排序

结构体数组的排序需要定义一个比较函数,对结构体数组中的元素按照指定规则进行排序。

struct student{
    char name[20];
    int age;
    float score;
};

bool cmp(const student& a, const student& b){
    return a.score > b.score;
}

int main(){
    student s[3] = {
        {"Jack",20,95.5},
        {"Lucy",19,86.0},
        {"Tom",21,78.5}
    };
    sort(s,s+3,cmp);
    for(int i=0;i<3;i++){
        cout<<s[i].name<<" "<<s[i].age<<" "<<s[i].score<<endl;
    }
    return 0;
}

以上代码演示了结构体数组按照分数从高到低进行排序的方法。