如何在C中的结构内使用union中的struct?

时间:2014-06-10 09:29:51

标签: c struct unions

我目前正在与个人非常复杂的结构进行斗争

struct crypto_tfm
{
    uint32_t crt_flags;

    union
    {
        struct ablkcipher_tfm ablkcipher;
        struct aead_tfm aead;
        struct blkcipher_tfm blkcipher;
        struct cipher_tfm cipher;
        struct hash_tfm hash;
        struct compress_tfm compress;
        struct rng_tfm rng;
    } crt_u;

    void (*exit)(struct crypto_tfm *tfm);

    struct crypto_alg *crt_alg;

    void *crt_ctx[] CRYPTO_MINALIGN_ATTR;
};

我完全不知道如何使用这个结构。所以基本上我完全迷失了这个

使用它的函数需要一个struct crypto_tfm * tfm

第一个想法如下:

struct crypto_tfm *new_tfm()
{
    struct crypto_tfm *tfm = malloc(sizeof(struct crypto_tfm));
    tfm -> crt_flags = 0;
    tfm -> crt_u.
}

但我不知道如何进一步,

联盟中的给定结构也使用其他结构。对我来说有点太复杂了

1 个答案:

答案 0 :(得分:1)

这是未经测试的,但应该是一个很好的例子:

struct st_a
{
  int a;
};

struct st_b
{
  int b;
};

union un_c
{
  struct st_a aa;
  struct st_b bb;
};

struct st_d
{
  int d;
  union un_c cc;
};

int main ()
{
  struct st_d *dd = malloc (sizeof (struct st_d));
  dd->d = 0;
  /* The following two lines might (probably are) accessing
     the same area of memory.  */
  dd->cc.aa.a = 0;
  dd->cc.bb.b = 1;
}