这个方法是我无意间尝试出来的,但我不是第一个发现的
有时我们需要动态分配数据来创建一个能够自定义长度的数组,结构体又能够方便我们定义变量,那么它们是否能够结合起来呢?
现在有一个情景,我们需要统计一群人的年龄和体重。
#include<stdio.h>
#include<stdlib.h>
int people_number;
struct people
{
int number;//号数
int age;//年龄
float weight;//体重
};
int main()
{
printf("输入人数:\n");
scanf("%d",&people_number);
people* person=(people*)malloc(sizeof(people)*people_number);
for (int i = 0; i < people_number; i++)
{
person[i].number=i;
printf("输入年龄:\n");
scanf("%d",&person[i].age);
printf("输入体重:\n");
scanf("%f",&person[i].weight);
}
for (int i = 0; i < people_number; i++)
{
printf("号数:%d\n",person[i].number);
printf("年龄:%d\n",person[i].age);
printf("体重:%f\n",person[i].weight);
}
return 0;
}
头文件:
#include<stdio.h>
#include<stdlib.h>
定义人数变量:
int people_number;
定义结构体:
struct people
{
int number;//号数
int age;//年龄
float weight;//体重
};
输入完变量people_number 的值之后,最重要的来了:
struct people* person=(struct people*)malloc(sizeof(struct people)*people_number);
其实就是把这个结构体当像 int 、float 的数据类型一样带入动态分配内存。其他的代码不过多赘述
编译后的输入与结果:
但是,有可能报错
出现“未声明的标识符”的报错,大家可以把代码改成这样子:
就是麻烦点,可能是我的头文件没有补齐