我试图在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函数是有意义的,因为它不会更改对象,但也许这是错误的?
我现在看到,也是加法函数不是数学上正确的,但我宁愿先修复其他错误。 – user1661303
加,newBigNumber()返回一个本地结构,在您使用它的时候超出了范围。你应该malloc()一个BigNumber并返回一个指向它的指针。 – deStrangis
为了避免混淆改变'typedef struct BigNumber BigNumber;'''typedef struct BigNumber_s BigNumber;''。在这之后调整它定义的这个'struct'的名字。 – alk