我试图在c语言中实现一个简单的BigNumber包,它可以执行算术运算。但是,我卡住了。我是c语言的新手,所以我不确定我使用的指针和引用是否正确。
这是我的密码:

#define MAXPARTS 60

struct BigNumber
{
    int parts[MAXPARTS];
};

typedef struct BigNumber BigNumber;

BigNumber newBigNumber()
{
    BigNumber bi;
    int i;
    for(i = 0; i < MAXPARTS; i++)
    {
        bi.parts[i] = 0;
    }
    return bi;
}

void setPartTo(BigNumber *bigNumber, int i, int value)
{
    (*bigNumber).parts[i] = value;
}

int getPart(BigNumber bigNumber, int i, int value)
{
    return bigNumber.parts[i];
}

BigNumber add(BigNumber a, BigNumber b)
{
    int carrier = 0;
    BigNumber *result = &newBigNumber();
    int i;
    for(i = 0; i < MAXPARTS; i++)
    {
        setPartTo(result, i, getPart(a, i)+getPart(b, i)+carrier);
    }
    return result;
}

我在add函数的setPartTo行得到一个错误。它说它需要一个结构大数*但得到了一个大数。我一直试图在结果之前改变这个东西,在它看起来合理的地方添加和删除,但是到目前为止,我还没有得到这个东西。有人能指出它有什么毛病吗?据我所见,我传递了一个指向函数setPartTo()的指针,但也许我没有。我还认为不将指向结构BigNumber的指针传递给函数getPart是有意义的,因为它不会更改对象,但这也可能是错误的?

最佳答案

这:

setPartTo(result, i, getPart(a, i)+getPart(b, i)+carrier);

不正确,因为只有两个参数被传递到getPart(),它接受三个参数:
int getPart(BigNumber bigNumber, int i, int value)

除了在问题中发布的错误之外,编译器还将发出其他错误。
此外,正如Graham Borland所述,您需要存储newBigNumber()的返回值:
BigNumber result = newBigNumber();

然后将结果的地址&result传递到setPartTo()

关于c - 是否使用指针将结构传递给函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12510381/

10-11 22:35
查看更多