我刚读完GMP(一个bignum图书馆)documentation。它似乎能够修改函数的参数。例如,初始化整数的工作方式如下:
mpz_t integer;
mpz_init(integer);
// ... Do some stuff
mpz_clear(integer);
mpz_init
为整数分配内存,mpz_clear
释放它。如果你必须传递一个指针,你可以修改函数参数(mpz_init(&integer)
),但似乎这没有传递指针。这是如何工作的?
答案 0 :(得分:6)
参考此source
有兴趣的是,GMP类型
mpz_t
等被实现为某些结构的单元素数组。这就是为什么声明变量会创建一个具有GMP需要的字段的对象,但是然后使用它作为参数传递指向对象的指针。
mpz_t
在gmp.h
文件中定义为
typedef struct
{
//struct body
} __mpz_struct;
typedef __mpz_struct mpz_t[1];
因此,基本上mpz_t
类型是一个数组(结构)类型。请记住,数组在传递给函数时会衰减指向其第一个元素。