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

时间:2013-05-30 16:09:24

标签: c function struct

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

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'在某些结构或联合'中,在我试图修改结构的所有行中。

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

9 个答案:

答案 0 :(得分:9)

Operator Precedence导致

*article.act_quantity

被解释为*(article.act_quantity)

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

答案 1 :(得分:5)

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

article->act_quantity

(*article).act_quantity

答案 2 :(得分:2)

*article.act_quantity更改为(*article).act_quantity,或更好地更改为article->act_quantity等。运营商优先权可让您到达此处......

答案 3 :(得分:1)

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

答案 4 :(得分:1)

这应解决问题

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;
    }
}

答案 5 :(得分:0)

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

article是指针,因此您不能只使用article.act_quantity,而应将.替换为->

article->act_quantity

答案 6 :(得分:0)

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

答案 7 :(得分:0)

此:

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

不起作用,note是一个字符数组,你不能将它去除它。你需要:

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

答案 8 :(得分:0)

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

因为您写的是*article->act_quantity而不是article->act_quantity。修复它