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;
これは、2つの整数とaを持つ構造の「形状」を定義し、それを次のmp_limb_t
ようにtypedefすることを理解しています。__mpz_struct
次に、次の行があります。
typedef __mpz_struct mpz_t[1];
そしてしばらくすると、これはもう1つです。
typedef __mpz_struct *mpz_ptr;
2つ目は(関数プロトタイプで使用される)__mpz_struct *
への型定義であることを理解していますmpz_ptr
しかし、私は最初のものが何をするのか、そしてなぜそれが機能するのか理解していないので、mpz_tを宣言することができます。なぜそれが機能するのか誰かが説明できますか?
ありがとう!