我正在尝试使用数据结构和算法创建自己的库。问题是我不知道该数据变量使用哪种类型。总有一天,我可能需要使用它来保存整数,而另一些则需要使用字符串。知道该怎么办吗?
例子:
typedef struct tree{
int data;
struct tree *left;
struct tree *right;
}tree;
但是,如果我想使用字符串,是否应该手动更改数据类型,或者是否可以通过其他方式声明数据?
我说的可能只是胡说八道,但这是我的想法:工会呢?
typedef struct tree{
union {
int i;
char * c;
} data;
struct tree *left;
struct tree *right;
}tree;
这不是您或多或少想要拥有的东西吗?一块内存,可以用作int
或char *
。让我简要地解释一下什么是a union
:union
创建变量时,它的内存位置与内部的最大内存位置一样大。由于并集内的所有子变量都将使用相同的内存位置,因此它们将相互覆盖。
例如,如果我要tree
直接从上面创建一个东西,就像这样:
tree asd;
我可以通过data
以下方式使用内部存储整数:
asd.data.i = 123;
然后,我可以在左侧很好地创建一个分支,并在其中存储一个字符串:
asd.left = malloc( sizeof asd );
asd.left->data.c = malloc( 10 );
memcpy( asd.left->data.c, "kek", 4 );
如果您不喜欢data
介于两者之间,则可以忽略它!但是首先,您也必须从声明中忽略它。
typedef struct tree{
union {
int i;
char * c;
}; // <-- removed the data
struct tree *left;
struct tree *right;
}tree;
然后,您可以访问两者i
,c
而无需写信data.
。
我希望所有这些都不是胡说八道,并且实际上会变得有用,嘿。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句