修改作为指针传递的结构 – C

我试图通过使用指针来修改作为参数传递的结构,但是我无法使其工作。 我不能只返回结构,因为该函数必须返回一个整数。 如何修改函数中的结构? 这是我到目前为止所做的:

typedef enum {TYPE1, TYPE2, TYPE3} types; typedef struct { types type; int act_quantity; int reorder_threshold; char note[100]; }elem; int update_article(elem *article, int sold) { if(*article.act_quantity >= sold) { article.act_quantity = article.act_quantity - sold; if(article.act_quantity < article.act_quantity) { strcpy(article.note, "to reorder"); return -1; } else return 0; } else if(article.act_quantity < venduto) { strcpy(*article.note, "act_quantity insufficient"); return -2; } } 

我得到这个错误:“错误:请求成员:’act_quantity’在某些结构或联合中”在我试图修改结构的所有行中。

编辑:我用过“。” 而不是“ – >”。 我现在修好了。 它仍然给我一个错误:“一元’*’的无效类型参数(有’int’)”

运算符优先级原因

 *article.act_quantity 

被解释为*(article.act_quantity)

它应该是(*article).act_quantityarticle->act_quantity (当LHS是指针时)

当您引用指向结构的指针时,您也需要

 article->act_quantity 

要么

 (*article).act_quantity 

*article.act_quantity更改为(*article).act_quantity ,或者更好地更改为article->act_quantity等。运算符优先级将您article->act_quantity此处…

在处理指针时应该是ptr->member ,而不是ptr.member

这应该可以解决问题

 int update_article(elem *article, int sold) { if(article->act_quantity >= sold) { article->act_quantity = article->act_quantity - sold; if(article->act_quantity < article->reorder_threshold) { strcpy(article->note, "to reorder"); return -1; } else return 0; } else if(article->act_quantity < sold) { strcpy( article->note, "act_quantity insufficient"); return -2; } } 

使用箭头操作符使用结构指针访问结构的成员。 但有效的记忆必须存在。

这个:

 strcpy(*article.note, "act_quantity insufficient"); 

不会工作, note是一个字符数组,你不能去它。 你需要:

 strcpy(article->note, "act_quantity insufficient"); 

您不必返回指向结构的指针,因为它仍将保持与输入相同。 您将地址传递给函数,并使用此地址处的某些内容。 在这种情况下,无需返回与结构相关的任何内容

article是一个指针因此你不能只使用article.act_quantity而你应该替换.->

article->act_quantity

  • 它仍然给我一个错误:“一元’*’的无效类型参数(有’int’)”

因为你写了*article->act_quantity而不是article->act_quantity 。 修理它