c语言 结构体中的数组
时间: 2023-11-08 09:05:06 浏览: 70
C语言中的结构体可以包含数组,这是为了方便处理一组相关数据。例如:
```
struct student {
char name[20];
int scores[5];
};
```
上述结构体中包含了一个字符串变量和一个整型数组变量,可以用来存储学生的姓名和成绩。其中 `scores` 数组可以用下标访问各个元素,例如 `scores` 表示学生的第一科成绩。
注意,结构体中的数组必须指定数组大小,否则无法分配内存空间。
相关问题
c语言结构体中数组调节大小
在C语言的结构体中可以使用数组来存储多个相同类型的数据。而调节数组大小的方法有两种。
第一种方法是在定义结构体时就确定数组的大小。例如,定义一个结构体Student,其中有一个名为grades的数组,用来存储学生成绩。我们可以在定义结构体时就确定grades数组的大小,如下所示:
```c
struct Student {
int grades[5];
};
```
上面的代码中,grades数组的大小被设置为5,所以每个学生最多可以存储5门课程的成绩。
第二种方法是在运行时动态调节数组的大小。这种方法需要使用指针和动态内存分配函数malloc来分配内存空间。例如,我们可以定义一个结构体Employee,其中有一个名为salaries的数组,用来存储员工的薪水。在运行时,我们可以根据需要动态调节salaries数组的大小,如下所示:
```c
struct Employee {
int* salaries;
int num_salaries;
};
int main() {
struct Employee emp;
int size;
// 获取需要存储的薪水数量
printf("请输入薪水数量:");
scanf("%d", &size);
// 动态分配内存空间
emp.salaries = (int*)malloc(size * sizeof(int));
emp.num_salaries = size;
// 存储薪水数据
for (int i = 0; i < size; i++) {
printf("请输入第%d个薪水:", i + 1);
scanf("%d", &emp.salaries[i]);
}
// 打印薪水数据
for (int i = 0; i < size; i++) {
printf("第%d个薪水:%d\n", i + 1, emp.salaries[i]);
}
// 释放内存空间
free(emp.salaries);
return 0;
}
```
上述代码中,首先我们定义了一个结构体Employee,其中salaries数组被定义为一个指针类型。然后,在运行时,通过调用malloc函数分配了一个大小为size的整型数组,并将其存储在emp.salaries中。用户输入需要存储的薪水数量后,通过循环逐个输入薪水数据,并打印出来。最后,使用free函数释放了动态分配的内存空间,以避免内存泄漏。
C语言结构体定义数组
下面是C语言结构体定义数组的示例代码:
```c
#include <stdio.h>
// 定义结构体
struct student {
char name[20];
int age;
float score;
};
int main() {
// 定义结构体数组并初始化
struct student stu_arr[3] = {
{"Tom", 18, 90.5},
{"Jerry", 19, 88.5},
{"Marry", 20, 95.0}
};
// 遍历结构体数组并输出每个元素的成员变量
for (int i = 0; i < 3; i++) {
printf("Name: %s, Age: %d, Score: %.1f\n", stu_arr[i].name, stu_arr[i].age, stu_arr[i].score);
}
return 0;
}
```
上述代码中,我们首先定义了一个结构体`student`,包含了三个成员变量`name`、`age`和`score`。然后我们定义了一个结构体数组`stu_arr`,并在定义时对其进行了初始化。最后我们使用`for`循环遍历结构体数组,并输出每个元素的成员变量。