#include<stdio.h>
#include<stdlib.h>
struct genericStorage
{
void *data;
int type;
};
struct genericNode
{
struct genericStorage storage;
struct genericNode *next;
};
struct genericNode *new,*temp;
struct genericNode* createGLL(int type)
{
int a;
char b;
if(type==0)
{
new=(struct genericNode *) malloc (sizeof(struct genericNode));
(new->storage).data=(int *) malloc (sizeof(int));
printf("Enter Integer");
scanf("%d",&a);
*((int *)(new->storage.data))=a;
new->storage.type=type;
new->next=NULL;
}
else if(type==1)
{
new=(struct genericNode *) malloc (sizeof(struct genericNode));
(new->storage).data=(char *) malloc (sizeof(char));
printf("Enter Char");
scanf("%c",&b);
*((char *)(new->storage.data))='c';
new->storage.type=type;
new->next=NULL;
}
else if(type==2)
{
new=(struct genericNode *) malloc (sizeof(struct genericNode));
temp=(struct genericNode *) malloc (sizeof(struct genericNode));
temp=createGLL(1);
(new->storage).data=(struct genericNode *)temp;
new->storage.type=type;
new->next=NULL;
}
}
void print(struct genericNode *t)
{
if(t->storage.type==0)
printf("%d\n",*(int *)t->storage.data);
if(t->storage.type==1)
printf("%c\n",*(char *)t->storage.data);
if(t->storage.type==2)
printf("%c\n",*(struct genericNode *)(t->storage.data->(temp->storage).data));
}
int main()
{
int type;
struct genericNode *head;
head=NULL;
printf("Enter the type");
scanf("%d",&type);
getchar();
head=createGLL(type);
print(head);
return 0;
}
我在打印功能中遇到问题,我必须打印存储在外部结构中的结构内的数据。如何访问内部结构中的数据并进行打印?请急需帮助。
答案 0 :(得分:2)
(t->storage.data->(temp->storage).data)
这条线毫无意义。您正在尝试访问storage.data中的成员,但您可以通过temp
获得对成员的另一个访问权限而不是有效成员的名称。它根本就不是C.
如果我理解您的代码t->storage.data
可能是另一个指向genericNode
的指针。在这种情况下,您可能希望改为:
if(t->storage.type == 2) {
struct genericNode *node = t->storage.data;
printf("Jumping to the inner genericNode at %p\n", (void *)node);
print(node); /* Call print again. */
}