我試圖在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