尝试执行此操作时:g->v+i=aux;
,我得到:
错误:需要左值作为赋值的左操作数”g->v
是指向动态分配的子数组的指针。
即使为数组分配了空间,编译器也不喜欢我递增指针。
int n=5
struct group
{
int n,x,y,exp,r;
struct group *v;
};
void init_group(struct group *g)
{
g->v=malloc(sizeof(struct group*)*(n));//an array of n elements
for(int i=0; i<n; i++)
{
struct group *aux;
g->v+i=aux; **// HERE IS THE ERROR**
}
}
我做错了什么?我可以使用什么替代方案?
1条答案
按热度按时间ua4mk5z41#
首先,您的
v
成员是一个struct group*
,这将允许它保存一个 structures 数组;但是您分配它(并试图分配它)的方式就好像它是指向结构的指针数组一样。因此,如果
malloc
调用正在执行您实际希望它执行的操作(即创建一个n
指针数组),则该成员应声明为指针到指针:struct group** v;
.第二,在访问数组元素时,不要使用指针运算,以免混淆:这就是
[]
运算符的作用一个简单的g->v[i] = aux;
就可以完成这项工作。以下是代码的修改/工作版本:
如果您确实 * 坚持 * 使用指针算术,而不是
[]
运算符,那么(在将成员类型更正为指针到指针之后),语法如下所示: