访问struct中的数组元素(它是结构数组的一部分)(在C中)

时间:2016-08-18 11:30:52

标签: c arrays pointers struct

我想创建一个结构数组,尽管没有。从用户的文件/输入中读取数组中的结构。

我声明了一个结构:

struct student{
    char name[16];
    int *available;
    int sum;
};

typedef struct student ST;

我为结构数组分配内存(在获得大小输入之后):

ptr = (ST*)calloc(lines, sizeof(ST));

我还为每个结构中的每个数组分配空间(使用循环):

ptr->available = (int*)calloc(lines, sizeof(int));

现在 - 我想在这些数组中放置值。我如何到达每个元素?

我试过了:

*((ptr+i)->(available+j)) = 1;

但是编译器告诉我:error: expected identifier before ‘(’ (我和j是我使用的索引,i代表第i个结构,j代表数组的第j个元素)。

我做错了什么?

2 个答案:

答案 0 :(得分:3)

考虑使用数组索引表示法来提高可读性:

ptr[i].available[j] = 1;

(使用显式指针算法的等效语法是更加模糊的*((ptr + i)->available + j) = 1;

答案 1 :(得分:1)

忘记*(ptr + idx)符号;它习惯于混淆初学者,而不是“实际代码”。但是,如果必须使用它,那么:

*((ptr+i)->available+j) = 1;

但请使用:

ptr[i].available[j] = 1;