将结构分配给多个结构成员

问题描述 投票:0回答:1

我想在不显式分配每个成员的情况下,通过为成员分配一个 "匹配 "的结构来初始化一个结构的几个成员。

为了更好地解释这个问题,下面是一个例子。我有两个结构,我想初始化成员ThingB。

typedef struct
{
    void* ThingB;
    void* ThingC;
}SomeThings_S;

typedef struct
{
    void* ThingA;
    void* ThingB;
    void* ThingC;
}AllThings_S;

我想通过直接将Somethings_S赋值给AllThings_S中的成员ThingB和ThingC来初始化成员。请看下面的内容。

void* ThingA;
void* ThingB;
void* ThingC;

SomeThings_S SomeThings =
{
    ThingB,
    ThingC,
};

AllThings_S AllThings =
{
    .ThingA = ThingA,
    SomeThings, <--- This is where I'm not sure how to proceed.
}

我可以做到以下几点

AllThings_S AllThings =
{
    .ThingA = ThingA,
    .ThingB = SomeThings.ThingB,
    .ThingC = SomeThings.ThingC,
}

但这是我想避免的。我更希望能直接将Somethings分配给AllThings中的ThingB和ThingC。

对不起,我不知道该怎么做。我很难尝试和解释。希望能看懂。

c structure
1个回答
0
投票

如果你 真的 想这样做--我想强调的是,我真的不建议这样做--你可以利用的。-fplan9-extensions-fms-extensions 选项,允许你直接访问匿名结构的成员。 如果使用clang,使用 -fms-extensions 因为它没有plan9的扩展,最后我知道。

它可能是什么样子的。

#include <stdlib.h>
#include <stdio.h>

typedef struct
{
    void* ThingB;
    void* ThingC;
}SomeThings_S;

typedef struct
{
    void* ThingA;
    SomeThings_S;
}AllThings_S;

int main(void) {

    int a;
    int b;
    int c;
    SomeThings_S x = {&a,&b};
    AllThings_S y = {&c, x};

    printf("%p, %p, %p\n", y.ThingA, y.ThingB, y.ThingC);

    return EXIT_SUCCESS;
}

0
投票

我用一个匿名的联合和结构解决了这个问题。

© www.soinside.com 2019 - 2024. All rights reserved.