我想创建一个结构数组,尽管没有。从用户的文件/输入中读取数组中的结构。
我声明了一个结构:
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个元素)。
我做错了什么?
答案 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;