2017-02-14 8 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 result и mpz_init(result). Почему также требуется mpz_init?

+2

Не забудьте mpz_clear! Или используйте интерфейс C++, который делает всю магию для вас. –

ответ

4

mpz_t result только объявляет переменную. Тип mpz_t является typedef для struct __mpz_struct. Эта структура содержит три переменные, которые инициализируются mpz_init(). Надеюсь, это поможет.

Смежные вопросы