创建,传递,返回Struct的数组并在C中循环遍历int

时间:2014-03-17 07:25:08

标签: c arrays struct

我需要执行一个函数,该函数返回具有可变长度的指定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数组?通话功能?并循环通过它直到结束?有人可以帮助我。

2 个答案:

答案 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循环简单地循环。否则你会发现循环问题。从创建数组的函数中获取数组大小更容易。