如何在C中访问数组中的特定结构?

时间:2017-01-16 18:14:25

标签: c arrays structure

我有这个:

typedef struct{
    field_1;
    field 2;
    .....
}student;

typedef struct{
    student record[100];
    int counter;
}List;

然后我想为每个'学生'添加信息,例如:

List *p;
gets(p->list[index]->field_1);

但是当我编译代码时,它抛出了这个:

[Error] base operand of '->' has non-pointer type 'student'

那么为什么我不能指向“列表”以及访问“列表”中特定“记录”的方式?

3 个答案:

答案 0 :(得分:1)

列表本身p是一个指针,但值record[100]不是。您可以使用->运算符来访问p.运算符的值,以访问成员records中的值。

答案 1 :(得分:1)

写作时

  `p->record[index]->field_1`

它被扩展为 (*p).(*record[index]).field_1

  record[index]` 

本身返回一个值,因此在此之前添加*运算符是没有意义的。但你可以使用

p->(record+index)->field_1

答案 2 :(得分:1)

  

添加可帮助您读取/写入记录值的代码段。   完成后释放指向结构的指针。

typedef struct{
int age;
int marks;
}student;

typedef struct{
student record[100];
int counter;
}List;

int main()
{ 
    List *p = (List*)malloc(sizeof(List));

    p->record[0].age = 15;
    p->record[0].marks = 50;
    p->counter = 1;
    free(p);
    return 0;
}