举个例子 要定义一个“班级”结构体 ,里面有班级的学生数量和存放学生成绩的数组(学生数量没有上限)
struct banji{
int num;
int score[num];
};
这样报错静态变量引用错误 我也知道这样不行 应该怎么解决呢?
定义一个大数组,再定义一个记录学生数量的变量,录入一个学生就加1:
struct banji{
int num;
int score[num];
}student[10000];
int count=0;
你这个要求实现不了,结构体中score数组只能定义固定的长度
两种办法,一是数组定义一个固定的足够大的空间,比如int score[100001];二是定义成指针,当num值确定后再动态分配数组空间
结构体里定义指针,动态分配内存。下面是一个简单的例子
#include <stdio.h>
#include <assert.h>
#include <stdlib.h>
struct Class
{
int num;
int *scores;
};
struct Class *allocClass(int num)
{
assert(num > 0);
struct Class *c = (struct Class *)malloc(sizeof(struct Class));
c->num = num;
c->scores = (int *)malloc(num * sizeof(int));
return c;
}
void freeClass(struct Class *c)
{
if (c)
{
free(c->scores);
free(c);
}
}
void printClass(struct Class *c)
{
assert(c);
for (int i = 0; i < c->num; i++)
printf("%d ", c->scores[i]);
printf("\n");
}
int main()
{
int n;
scanf("%d", &n);
struct Class *c = allocClass(n);
for (int i = 0; i < n; i++)
scanf("%d", &c->scores[i]);
printClass(c);
freeClass(c);
return 0;
}