我正在尝试在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的定义来满足这个要求。
需要帮助。
答案 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}}秒。