在不传递指针的情况下修改函数的参数

ibl*_*lue 0 c

我刚刚阅读了GMP(一个bignum图书馆)文档.它似乎能够修改函数的参数.例如,初始化整数的工作方式如下:

mpz_t integer;
mpz_init(integer);
// ... Do some stuff
mpz_clear(integer);
Run Code Online (Sandbox Code Playgroud)

mpz_init为整数分配内存,mpz_clear释放它.如果你必须传递一个指针,你可以修改函数参数(mpz_init(&integer)),但似乎这没有传递指针.这是如何运作的?

hac*_*cks 6

参考这个来源

为了兴趣,GMP类型mpz_t等被实现为某些结构的单元素阵列.这就是为什么声明变量会创建一个具有GMP需要的字段的对象,但是然后将其用作参数会传递指向该对象的指针.

mpz_tgmp.h文件中定义为

typedef struct
{
    //struct body
} __mpz_struct;

typedef __mpz_struct mpz_t[1];  
Run Code Online (Sandbox Code Playgroud)

所以,基本上mpz_t类型是一个数组(结构)类型.请记住,数组在传递给函数时会衰减指向其第一个元素.