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

时间:2015-02-01 09:53:14

标签: c

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

mpz_t integer;
mpz_init(integer);
// ... Do some stuff
mpz_clear(integer);

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

1 个答案:

答案 0 :(得分:6)

参考此source

  

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

mpz_tgmp.h文件中定义为

typedef struct
{
    //struct body
} __mpz_struct;

typedef __mpz_struct mpz_t[1];  

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