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

C 在不传递指针的情况下修改函数的参数,c,C,我只是在读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(一个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\u t
gmp.h
文件中定义为

typedef struct
{
    //struct body
} __mpz_struct;

typedef __mpz_struct mpz_t[1];  
因此,基本上,
mpz_t
type是一种数组(结构)类型。请记住,数组在传递给函数时会衰减为指向其第一个元素的指针。

引用此

出于兴趣,GMP类型
mpz_t
等被实现为特定结构的单元素阵列。这就是为什么声明一个变量会创建一个带有GMP所需字段的对象,但使用它作为参数会传递一个指向该对象的指针

mpz\u t
gmp.h
文件中定义为

typedef struct
{
    //struct body
} __mpz_struct;

typedef __mpz_struct mpz_t[1];  

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

mpz\u t
可以是指针,也可以是内部保存指针的结构。
mpz\u init
可能是类似函数的宏,而不是函数。
mpz\u t
可以是指针,或者在内部保存指针的结构。
mpz_init
可能是类似于宏的函数,而不是函数。