【问题标题】:How to print a value in a struct pointer pointed for other struct?如何在指向其他结构的结构指针中打印一个值?
【发布时间】:2018-10-10 03:31:03
【问题描述】:

考虑到我有两个结构,其中一个指向另一个,我怎么能从第二个结构打印一个值,校准第一个?

以下程序的简要说明:

NODE,一个指向自身的结构体,用来堆成一堆,指向一个泛型指针 ALUNO,NODE 中的泛型指针将指向的结构 createNode,为节点分配内存的函数 preencherNode,用相应的 ALUNO 填充节点的指针 pushNode,新建一个节点,指向上一个创建的,做一堆 criarAluno,为 ALUNO 分配内存并填充它的 camps。

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

typedef struct
{
    int id;
    float media;
} ALUNO;

typedef struct node
{
    void *pointer;
    struct node* link;
} NODE;

NODE* createNode(void)
{
    NODE* topo;
    topo=(NODE*)malloc(sizeof(NODE));

    topo->pointer = NULL;
    topo->link = NULL;
    return(topo);
}

NODE* pushNode (NODE* topo)
{
    NODE* novo;
    novo=createNode();

    novo->link=topo;
    topo = novo;

    return(topo);
}

NODE* preencherNode (NODE* topo, ALUNO* data)
{
    topo->pointer=data;
    return(topo);
}

ALUNO* criarAluno(FILE* v)
{
    ALUNO* aln;
    aln=(ALUNO*)malloc(sizeof(ALUNO));

    int x;
    float y1,y2;
    fscanf (v, "%d %f %f",&x,&y1,&y2);

    aln->id=x;
    y1=(y1+y2)/2;
    aln->media=y1;

    return(aln);
}

void printData (NODE* topo)
{
    NODE* aux;
    aux=topo;

    ALUNO* aln;

    while(aux->link!=NULL)
    {
        aln=((ALUNO*)(aux->link));

        printf("ID: %d \n",aln->id);
        printf("Media: %f \n",aln->media);
        printf("........................ \n");

        aux=aux->link;
    }
}

void main ()
{
    FILE *doc;
    doc = fopen("documento.txt","r");
    if (doc==NULL){
        printf("Nao ha como abrir o arquivo");
        return(-1);
    }
    NODE *pilha;
    pilha=createNode();

    ALUNO* aluno;
    int x;

    for(x=0;x<11;x++)
    {
        aluno=criarAluno(doc);
        pilha=preencherNode(pilha,aluno);
        pilha=pushNode(pilha);
    }

    printData(pilha);
}

所以现在,函数 printData 正在打印我想要的值的分配空间内存,而不是值。

【问题讨论】:

  • 请给minimal reproducible example。显示说明如何使用这两个结构的附加代码。
  • 如果 node->pointer 真的是一个指向 ALUNO 的指针,那么你可以强制转换它。 int id = ((ALUNO *)node->pointer)->id; printf("%d", id);
  • 我添加了一个更完整的版本以便更好地理解。

标签: c


【解决方案1】:

鉴于您有 NODE *node....

ALUNO *aluno;
aluno = (ALUNO *)(node->pointer)
printf("%d", aluno->id)

【讨论】:

  • 打印的是分配的地址,而不是值。
  • 我认为你的代码现在在打印例程中使用链接而不是指针!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多