我试图在 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 行收到错误。它说它需要一个 struct BigNumber * 但得到一个 BigNumber。我一直在尝试更改结果之前的内容,在看起来合理的地方添加 & 和删除 *,但到目前为止,我还没有让这件事起作用。有人能指出它有什么问题吗?据我所知,我传递了一个指向函数 setPartTo() 的指针,但也许我没有。我还认为不将指向结构 BigNumber 的指针传递给函数 getPart 是有意义的,因为它不会更改对象,但也许这也是错误的?