算術演算を実行できる単純な BigNumber パッケージを c で実装しようとしています。しかし、私は立ち往生しています。私は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 行でエラーが発生します。構造体 BigNumber * を期待していたが、BigNumber を取得したと表示されます。結果の前に & を追加して * を削除して、合理的に見えるところを変更しようとしましたが、これまでのところ、うまくいきませんでした。誰かがそれの何が悪いのか指摘できますか? 私が見る限り、関数 setPartTo() へのポインタを渡していますが、おそらくそうではありません。オブジェクトを変更しないため、構造体 BigNumber へのポインタを関数 getPart に渡さないことも理にかなっていると思いますが、これも間違っているのでしょうか?