【发布时间】:2013-07-03 22:35:54
【问题描述】:
我想在 C/C++ 中创建一个通用链表(不使用 C++ 模板)。 我已经编写了以下简单的程序,到目前为止它运行良好 -
typedef struct node
{
void *data;
node *next;
}node;
int main()
{
node *head = new node();
int *intdata = new int();
double *doubledata = new double();
char *str = "a";
*doubledata = 44.55;
*intdata = 10;
head->data = intdata;
node *node2 = new node();
node2->data = doubledata;
head->next = node2;
node *node3 = new node();
node3->data = str;
node3->next = NULL;
node2->next = node3;
node *temp = head;
if(temp != NULL)
{
cout<<*(int *)(temp->data)<<"\t";
temp = temp->next;
}
if(temp != NULL)
{
cout<<*(double *)(temp->data)<<"\t";
temp = temp->next;
}
if(temp != NULL)
{
cout<<*(char *)(temp->data)<<"\t";
temp = temp->next;
}
return 0;
}
我的问题是—— 我需要知道我在上面的代码中打印的数据的数据类型。 例如 - 第一个节点是 int 所以我写了 - *(int *)(temp->data) 第二个是双倍的,依此类推... 相反,是否有任何通用的方法可以简单地显示数据而不用担心数据类型?
我知道您可以使用模板来实现这一点,但如果我只能在 C 中执行此操作呢?
谢谢, 凯达
【问题讨论】:
-
啊,C/C++,没有可怕的模板和充满就业机会的神奇语言......
-
C 中
void *的全部意义在于您不知道类型。在不知道类型的情况下,您无法明智地“显示数据”。你甚至不知道要显示多少数据。 -
为什么不使用
boost::any? -
不可能是C; C 中没有
new运算符。 -
同意Kerrek SB。这种代码产生了大量的就业机会。主要是在修复错误。
标签: c++ pointers void-pointers