Инициализация переменных в GMP
Согласно руководству 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;
}
если вы удалите mpz_init(result);
из приведенного выше кода компилятор выдаст ошибку ошибки сегментации. Итак, мой вопрос, в чем именно разница между этими двумя типами определений: mpz_t result
а также mpz_init(result)
, Почему mpz_init
также требуется?
1 ответ
Решение
mpz_t result
только объявляет переменную. Тип mpz_t
является typedef для struct __mpz_struct
, Эта структура содержит три переменные, которые инициализируются mpz_init()
, Надеюсь, это поможет.