gpt4 book ai didi

c - 使用或不使用指针将结构传递给函数

转载 作者:太空宇宙 更新时间:2023-11-04 01:37:09 25 4
gpt4 key购买 nike

我试图在 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;
}

我在添加函数的 setPartTo 行收到错误。它说它需要一个 struct BigNumber * 但得到了一个 BigNumber。我一直在尝试改变结果之前的东西,在看起来合理的地方添加 & 和删除 *,但到目前为止,我还没有得到工作。有人能指出它有什么问题吗?据我所知,我传递了一个指向函数 setPartTo() 的指针,但也许我没有传递。我还认为不将指向 struct 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com