2017-02-14 75 views
2

根據GMP手冊,「整數算術的函數假定所有的整數對象都被初始化了,你可以通過調用函數mpz_init來完成」。GMP中變量的初始化

例如,

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; 
} 

如果從代碼去除mpz_init(result);以上,則編譯器將產生一個分段錯誤。那麼,我的問題是,這兩種定義究竟有什麼區別:mpz_t resultmpz_init(result)。爲什麼還需要mpz_init

+2

不要忘記mpz_clear!或者使用C++接口,它爲你提供了所有的魔力。 –

回答

4

mpz_t result只聲明一個變量。類型mpz_tstruct __mpz_struct的typedef。該結構包含三個由mpz_init()初始化的變量。希望有所幫助。