gpt4 book ai didi

c - 在另一个结构中使用 node.next 打印列表

转载 作者:行者123 更新时间:2023-11-30 15:47:38 25 4
gpt4 key购买 nike

所以我已经弄清楚如何链接列表,但现在我想显示它,我怎样才能实现这一点。我已经开始编写代码,但这就是不对的。有什么帮助吗?

typedef struct baseNode_s
{
struct baseNode_s *proximo;
} baseNode;

typedef struct identificador_s
{
int a;
int b;
int c;
} identificador;

typedef struct contaBancaria_s
{
identificador id;
int saldo;
int credito;
baseNode node;
} contaBancaria;

contaBancaria *contaP = NULL;

void lcontas() {
contaBancaria *p;
printf("\n=================INICIOU A listagem\n");
for(p=contaP; p->node.proximo != NULL; p->node = p->node.proximo){
printf("\n%d - %d - %d %d %d", p->id.a, p->id.b, p->id.c, p->saldo, p->credito);
}
free(p);
printf("\nChegou ao fim da listagem\n");
}

最佳答案

根据您定义的数据结构,您需要一种机制来恢复指向contaBancaria的原始指针。从指针到baseNodecontaBancaria包含。

您可以通过使用 offsetof() 的辅助函数来做到这一点宏。

contaBancaria *base2conta (baseNode *base) {
return base ? (void *)((char *)base - offsetof(contaBancaria, node)) : NULL;
}

那么当你迭代的时候,你可以将 proximo 转换为到 contaBancaria .

for(p=contaP; p != NULL; p = base2conta(p->node.proximo)){
printf("\n%d - %d - %d %d %d",
p->id.a, p->id.b, p->id.c, p->saldo, p->credito);
}

您也不应该free(p)在你的打印功能中。 p正在用于读取列表,没有分配新的内存来执行此操作。

关于c - 在另一个结构中使用 node.next 打印列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17265062/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com