0

我正在尝试在 C 中实现我自己的 GMP mpz_t 数据类型版本。为此,我在定义 mpz_t 的结构时遇到了问题。

这是因为我这样定义我的 mpz_t

typedef struct integer
{
int array[100];
int no_digits;
}mdi;

显然,我将我的大值存储为整数数据类型的数组,而 no_digits 是结构中的位数。但是现在,对于init函数,我要满足下面的原型

void mdi_init(mdi x); // Initialises the data-type.

这里返回类型为 void,输入参数为 mdi 类型。我对如何通过我对 mdi 的定义来满足这一要求感到困惑。

需要帮助。

4

1 回答 1

1

我对如何通过我对 mdi 的定义来满足这一要求感到困惑。

你不能。

structs 是按值传递的,因此以 anmdi作为参数的函数不能更改传递的参数。

GMP 定义mpz_t为 s 的数组(长度为 1)__mpz_struct

typedef __mpz_struct mpz_t[1];

并且__mpz_struct类似于您的mdi结构。所以mpz_init()接收到一个指向__mpz_struct. 你需要做同样的事情,你可以mdi_init()明确地将一个指针mdi作为参数,或者像 GMP 一样,创建mdi一个 s 的数组(长度为 1)mdi_struct

于 2013-02-04T14:41:19.743 回答