我需要执行一个函数,该函数返回具有可变长度的指定struct
的数组。然后我应该遍历返回的数组。
示例struct:
typedef struct student {
int id;
char *name;
int grade;
} Student;
函数原型1:
Student *students;
students = findStudentByGrade(int grade);
函数原型2:
Student *students;
int retval = findStudentByGrade(&students, int grade);
我对上述方法感到有点困惑。如何正确定义struct数组?通话功能?并循环通过它直到结束?有人可以帮助我。
答案 0 :(得分:1)
我的意思是这是一个非常基本的问题,但是:
定义结构数组如下:
int size = ...;
Student *students = (Student*) malloc(sizeof(Student) * size);
然后将其传递给函数(大小和数组),然后循环直到i<大小
当然,不要忘记:
free(students);
最后。
答案 1 :(得分:1)
你可以这样做。这段代码正在运行。我在CodeLite中测试过。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct student {
int id;
char *name;
} Student;
Student *findStudent(int *asize, const int grade);
int main(void)
{
Student *stds;
int asize = 0;
stds = findStudent(&asize, 5);
int i;
for (i = 0; i < asize; i++) {
printf("ID : %i\n", stds[i].id);
}
return 0;
}
Student *findStudent(int *asize, const int grade)
{
struct student *stds = malloc(sizeof(struct student) * 3);
stds[0].id = 10;
stds[1].id = 20;
stds[2].id = 40;
*asize = 3;
return stds;
}
获取结构数组作为返回语句并传递带参数列表的int变量以获取大小,并使用for循环简单地循环。否则你会发现循环问题。从创建数组的函数中获取数组大小更容易。