查看 GMPlib(用于多精度计算的 Gnu 库)的源代码,我发现了这种用于构建其 mp*_t 结构的代码。我已经在我做过的各种其他作品中复制了它,但我并不完全理解它。
typedef struct
{
int _mp_alloc; /* Number of *limbs* allocated and pointed
to by the _mp_d field. */
int _mp_size; /* abs(_mp_size) is the number of limbs the
last field points to. If _mp_size is
negative this is a negative number. */
mp_limb_t *_mp_d; /* Pointer to the limbs. */
} __mpz_struct;
我知道这定义了具有两个整数和 a 的结构的“形状”,并将其mp_limb_t
typedefs 为__mpz_struct
然后是这一行:
typedef __mpz_struct mpz_t[1];
过了一会儿,另一个:
typedef __mpz_struct *mpz_ptr;
我知道第二个是类型定义(在函数原型中使用__mpz_struct *
)mpz_ptr
但我不明白第一个是做什么的以及它为什么起作用,所以我可以声明一个 mpz_t。谁能解释它为什么起作用?
谢谢!