GMP中变量的初始化

Goe*_*nin 3 c++ gmp arbitrary-precision

根据GMP的手册,“用于整数算术的函数假定所有整数对象均已初始化。您可以通过调用函数mpz_init来实现。”

例如,

int main(){
    mpz_t n1, n2, result;
    mpz_init_set_str(n1, "465860", 10);
    mpz_init_set_str(n2, "167", 10);
    mpz_init(result);
    mpz_mod(result, n1, n2);
    mpz_out_str(stdout, 10, result);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

如果mpz_init(result);从上面的代码中删除,则编译器将产生分段错误错误。所以,我的问题,究竟是这两个类型定义的区别:mpz_t result和mpz_init(result)。为什么mpz_init还需要?

小智 5

mpz_t result只声明一个变量。类型mpz_t是的typedef struct __mpz_struct。此结构包含三个由初始化的变量mpz_init()。希望能有所帮助。