Инициализация переменных в 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(), Надеюсь, это поможет.

Другие вопросы по тегам