【问题标题】:How to reference values of structure from variable of a different structure?如何从不同结构的变量中引用结构的值?
【发布时间】:2021-11-29 03:12:41
【问题描述】:

对不起,如果标题有点混乱,作为 C 的初学者,我真的不知道该怎么说。所以我试图创建一个单链表,其中每个节点不仅有一个指向下一个节点的指针,还有一个指向从该节点开始的子链表的指针。基本上每个节点都有自己的链表。在尝试创建此 LL 时,我有一个结构,其中包含每个节点应具有的特征,例如指向下一个节点的指针和指向源自它的数据链表的指针。我听说你实际上能够制作一个结构的结构。我想创建第二个结构来构造节点所持有的数据类型:

struct NODE{
    void* data;
    struct Node* next;
}NODE;

typedef struct stuff{
    int data1;
    int data2;
    int data3;
}STUFF;

我现在的问题是,如果说我有一个来自 struct NODE 的节点,例如“NODE* 节点”,我将如何引用该节点的数据类型(data1、data2 等)?我试过铸造,但不确定我是否做错了,但类似这样:

(STUFF)node->data1= DATA1; 
//where DATA1 is of course already defined to be some int

我在函数内部执行此操作,但收到错误消息“强制转换是非法的,不支持左值转换”。

【问题讨论】:

  • 不清楚您所说的“子链表”是什么意思。您似乎在描述struct stuff 类型的东西,除了 not 看起来像一个列表节点。您是否尝试将此结构打包在void* 中?请构建一个示例列表及其内容来说明您要执行的操作。听起来您想要一个链表,其中每个节点的 data 成员指向另一个 struct NODE (作为子列表),并且每个 那些 节点都有它们的 data 成员指向struct stuff 值。对吗?
  • NODE 和 Node 类型有什么区别? Node在哪里定义?
  • 基本上我想创建一个单链表,与基本 LL 相比,每个节点只有一条数据,这个 LL 的节点有多个数据(data1、data2 等)。 )
  • 那你为什么不使用 STUFF 类型的指针而不是 void 呢?
  • 你是@uwu的同学吗?见this question

标签: c structure


【解决方案1】:

关于您的演员阵容问题...您可以这样做。

typedef struct Node{
    void* data;
    struct Node* next;
}NODE;

typedef struct stuff{
    int data1;
    int data2;
    int data3;
}STUFF;

int main()
{
    NODE *n = malloc(sizeof(NODE));
    n->data = malloc(sizeof(STUFF));
    STUFF *s = n->data;
    s->data1 = 15;
    printf("%d", ((STUFF*) n->data)->data1);
    return 0;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-19
    • 1970-01-01
    • 2015-07-13
    • 1970-01-01
    • 1970-01-01
    • 2021-12-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多