我只是在阅读GMP(bignum库)文档。它似乎能够修改函数的参数。例如,初始化整数的操作如下:
mpz_t integer;
mpz_init(integer);
// ... Do some stuff
mpz_clear(integer);
mpz_init
为整数分配内存,mpz_clear
将其释放。如果必须传递指针,则可以修改函数参数(mpz_init(&integer)
),但似乎无需传递指针也可以。这是如何运作的?
引用此来源
出于兴趣,GMP类型
mpz_t
等被实现为某些结构的单元素数组。这就是为什么声明变量会创建具有GMP需要的字段的对象,然后将其用作参数将指针传递给该对象的原因。
mpz_t
在gmp.h
文件中定义为
typedef struct
{
//struct body
} __mpz_struct;
typedef __mpz_struct mpz_t[1];
因此,基本上mpz_t
类型是数组(结构)类型。请记住,数组在传递给函数时会衰减到指向其第一个元素的指针。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句