【问题标题】:Implementation of mdi_init of the gmp library in CC中gmp库的mdi_init的实现
【发布时间】:2013-02-04 13:41:44
【问题描述】:

我正在尝试在 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 的定义来满足这一要求感到困惑。

需要帮助。

【问题讨论】:

  • 这没有意义。您是否尝试重新实现您自己的 GMP 版本?
  • 是的,我正在尝试实现我自己的 GMP 版本。

标签: c gmp


【解决方案1】:

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

你不能。

structs 是按值传递的,因此以 mdi 为参数的函数无法更改传递的参数。

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

typedef __mpz_struct mpz_t[1];

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-10
    • 2017-06-12
    • 1970-01-01
    • 2012-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多