修改作为指针传递的结构 – 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_quantity
或article->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
。 修理它