在C中实现gmp库的mdi_init

时间:2013-02-04 13:41:44

标签: c gmp

我正在尝试在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的定义来满足这个要求。

需要帮助。

1 个答案:

答案 0 :(得分:1)

  

我很困惑如何用我对mdi的定义来满足这个要求。

你不能。

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

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

typedef __mpz_struct mpz_t[1];

__mpz_struct类似于您的mdi结构。因此mpz_init()会收到指向__mpz_struct的指针。您需要执行相同的操作,您可以使mdi_init()显式地将指针mdi作为参数,或者像GMP一样,使mdi成为mdi_struct的数组{ {1}}秒。