C语言 结构体数组详解及示例代码
结构体是C语言中最为基础的数据结构之一,它可以将多个数据类型组合成一个整体,方便地进行访问和管理。而结构体数组则是将多个相同结构体类型的变量按照一定规律排列在一起的一种数据结构。本文将详细讲解C语言中结构体数组的使用方法及示例代码。
定义结构体
首先,我们需要定义一个结构体类型。结构体类型需要指定名称、成员变量及其数据类型:
struct student {
int id; // 学号
char name[20]; // 姓名
int age; // 年龄
} ;
上述结构体定义了一个名为student
的结构体类型,它包含三个成员变量,分别为id
(整型)、name
(字符型数组)和age
(整型)。定义好了结构体类型之后,我们就可以定义结构体变量了。
定义结构体数组
定义结构体数组的语法格式如下:
struct student stu_list[3] = {
{1, "Tom", 18},
{2, "Jerry", 19},
{3, "Lucy", 20}
};
上述代码定义的是一个包含三个student
类型的结构体数组,每个结构体包含了id
、name
和age
三个成员变量,且分别赋值为1、"Tom"、18、2、"Jerry"、19、3、"Lucy"、20。这样,我们就定义了一个名为stu_list
的结构体数组,其中包含了三个学生的信息。
在定义结构体数组时,我们可以使用初始化列表对各个元素的值进行多种赋值。而且,结构体数组的元素个数并不固定,可以根据实际情况需求来定义。
访问结构体数组
访问结构体数组的元素时,首先需要通过下标访问到具体的元素,然后再通过.
操作符访问具体的成员变量。例如,访问stu_list
中第一个学生的姓名可以使用以下语法:
printf("%s", stu_list[0].name);
这里使用了下标0
来访问第一个元素,然后使用.
操作符访问到该元素中的成员变量name
。
示例代码 1
我们来看一个结构体数组的完整示例。下面这个程序定义了一个学生信息结构体类型,使用结构体类型定义了一个包含10个学生信息的结构体数组,并对这些学生的信息进行了打印:
#include<stdio.h>
struct student {
int id;
char name[20];
float score;
} stu_list[10] = {
{1, "Tom", 78},
{2, "Jerry", 89},
{3, "Lucy", 90},
{4, "Mary", 67},
{5, "Bob", 80},
{6, "Jim", 75},
{7, "Lisa", 86},
{8, "David", 65},
{9, "Frank", 98},
{10, "John", 88}
};
int main()
{
int i;
for(i=0; i<10; i++) {
printf("id:%d, name:%s, score:%.1f\n", stu_list[i].id, stu_list[i].name, stu_list[i].score);
}
return 0;
}
运行结果:
id:1, name:Tom, score:78.0
id:2, name:Jerry, score:89.0
id:3, name:Lucy, score:90.0
id:4, name:Mary, score:67.0
id:5, name:Bob, score:80.0
id:6, name:Jim, score:75.0
id:7, name:Lisa, score:86.0
id:8, name:David, score:65.0
id:9, name:Frank, score:98.0
id:10, name:John, score:88.0
该程序定义了一个名为stu_list
的结构体数组,其中包含了10个学生的信息。然后程序利用循环遍历了该结构体数组中的每个元素,并访问了其中的id
、name
和score
这三个成员变量,并将这些变量的值打印输出。
示例代码 2
我们再看一个结构体数组的应用示例,如下所示,程序定义了一个学生信息结构体类型,通过输入运用结构体数组对其进行排序:
#include<stdio.h>
#include<string.h>
struct student {
char name[20];
int age;
};
int main()
{
int i, j, n;
struct student stu_list[100];
struct student temp;
printf("请输入学生数量:");
scanf("%d", &n);
for(i=0; i<n; i++) {
printf("请输入第%d个学生的姓名和年龄(用空格分隔):", (i+1));
scanf("%s %d", stu_list[i].name, &stu_list[i].age);
}
for(i=0; i<n-1; i++) {
for(j=i+1; j<n; j++) {
if(strcmp(stu_list[i].name, stu_list[j].name) > 0) {
temp = stu_list[i];
stu_list[i] = stu_list[j];
stu_list[j] = temp;
}
}
}
printf("按姓名排序后的结果为:\n");
for(i=0; i<n; i++) {
printf("姓名:%s, 年龄:%d\n", stu_list[i].name, stu_list[i].age);
}
return 0;
}
运行结果:
请输入学生数量:3
请输入第1个学生的姓名和年龄(用空格分隔):Lucy 18
请输入第2个学生的姓名和年龄(用空格分隔):Tom 20
请输入第3个学生的姓名和年龄(用空格分隔):Jerry 19
按姓名排序后的结果为:
姓名:Jerry, 年龄:19
姓名:Lucy, 年龄:18
姓名:Tom, 年龄:20
该程序定义了一个名为stu_list
的结构体数组,并利用循环遍历每一个结构体变量,输入其中的名字和年龄。然后该程序使用冒泡排序方法对数组进行了按名字排序,并打印输出了姓名和年龄两个成员变量的值。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言 结构体数组详解及示例代码 - Python技术站